0

我尝试使用 AES Encrypt 对不同平台的字符串进行加密。我可以成功地执行它 PHP 和 Java。但是当我在 ASP .NET 中尝试它时,它给出了不同的价值。JAVA代码

String input="Text";
String key="1234567891234567";
    byte[] crypted = null;
            try {
                SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
                Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
                cipher.init(Cipher.ENCRYPT_MODE, skey);
                crypted = cipher.doFinal(input.getBytes());
            } catch (Exception exception) {
                throw exception;
            }
            return new String(Base64.encodeBase64(crypted));

ASP 代码:

AesManaged tdes = new AesManaged();
 tdes.Key = Encoding.UTF8.GetBytes("1234567891234567");
                    tdes.Mode = CipherMode.ECB;
                    tdes.Padding = PaddingMode.PKCS7;
                    ICryptoTransform crypt = tdes.CreateEncryptor();
                    byte[] plain = Encoding.UTF8.GetBytes(Text);
                    byte[] cipher = crypt.TransformFinalBlock(plain, 0,plain.Length);
                    encryptedText = Convert.ToBase64String(cipher);

我在第二部分做错了什么?谢谢

4

2 回答 2

1

您的代码示例可能存在两个问题。我目前无法测试 ASP 代码,所以目前这是一个理论:

  1. 在您的 Java 代码中,您getBytes()两次调用并且未能提供字符集。这意味着您将使用默认平台字符集。相反,在您的 ASP 代码中指定 UTF-8。我强烈建议您将 Java 代码更改getBytes("UTF-8")为强制匹配。

  2. 同样,您可以使用以下代码返回 base64 结果:

    return new String(Base64.encodeBase64(crypted));
    

    我假设这是公共代码Base64?如果是这样,该encodeBase64方法将返回 UTF-8 字节,但在将字节解释为字符串时,您再次依赖默认平台字符集。将其更改为:

    return new String(Base64.encodeBase64(crypted), "UTF-8");
    

    或使用方便的方法:

    return Base64.encodeBase64String(crypted);
    

如果您平台的默认编码不是 UTF-8,那么上述错误可能会导致您的问题。如果您的默认编码UTF-8,那么上面的更改将确保您的代码更具可移植性(但可能不会解决您的问题)。

于 2013-07-04T07:00:41.783 回答
0

您可以使用下面的代码来获得与您的代码完全相同的结果JAVA

视觉基本代码:

Imports System.Security.Cryptography

Public Shared Function encrypt(data As String, key As String)
    Dim tdes As AesManaged = New AesManaged()
    tdes.Key = Encoding.UTF8.GetBytes(key)
    tdes.Mode = CipherMode.ECB
    tdes.Padding = PaddingMode.PKCS7
    Dim crypt As ICryptoTransform = tdes.CreateEncryptor()
    Dim plain As Byte() = Encoding.UTF8.GetBytes(data)
    Dim cipher As Byte() = crypt.TransformFinalBlock(plain, 0, plain.Length)
    Dim encryptedText As String = Convert.ToBase64String(cipher)
    Return encryptedText
End Function
于 2015-09-24T07:54:49.463 回答