gpt4 book ai didi

java - AES 加密 JAVA 和 ASP .Net

转载 作者:行者123 更新时间:2023-12-01 14:22:04 26 4
gpt4 key购买 nike

我尝试针对不同平台使用 AES 加密来加密字符串。我可以成功执行 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);

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

最佳答案

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

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

  2. 以类似的方式,您可以使用以下代码返回 Base64 结果:

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

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

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

    或者使用便捷方法:

    return Base64.encodeBase64String(crypted);

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

关于java - AES 加密 JAVA 和 ASP .Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17455950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com