AES ENCRYPT JAVA和ASP .Net

时间:2013-07-03 18:51:57

标签: java asp.net aes

我尝试使用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);

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

2 个答案:

答案 0 :(得分: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);
    
  3. 如果您平台的默认编码不是UTF-8,则上述错误可能会导致您的问题。如果您的默认编码 是UTF-8,那么上述更改将确保您的代码更具可移植性(但可能无法解决您的问题)。

答案 1 :(得分:0)

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

Visual Basic代码:

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