gpt4 book ai didi

java - AES 128 DOT NET 和 Java 兼容性

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:03:02 24 4
gpt4 key购买 nike

我们一直在尝试一个方案的原型(prototype),我们在两个系统之间加密解密数据:一个在 .NET 中,另一个在 Java 中。我们打算使用简单的 128 位 AES 加密。

我面临的问题是微不足道的,但我找不到合适的解决方案。也许我对 AES 或一般加密的理解较少。

假设我们有一个预定义的 key ,由以下十六进制字符串表示:“9c361fec3ac1ebe7b540487c9c25e24e”。这是一个 16 字节的 key 。Java 中的加密部分是

  final byte[] rawKey = hexStringToByteArray("9c361fec3ac1ebe7b540487c9c25e24e");
final SecretKeySpec skeySpec = new SecretKeySpec(rawKey, "AES");
// Instantiate the cipher
final Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

final byte[] encrypted = cipher.doFinal(plainText.getBytes());

'hexStringToByteArray' 函数将十六进制字符串转换为字节数组。问题是在 java 中,字节是有符号的。所以值 9C 是 -100 而不是 156(在 .NET 中是这样)。

在 Java 中,它变为:-100,54,31,-20,58,-63,-21,-25,-75,64,72,124,-100,37,-30,78

然而,在 .NET 中,这是:156,54,31,236,58,193,235,231,181,64,72,124,156,37,226,78

问题:鉴于 key 本身的表示不同,它会影响加密过程本身吗?这是没有 CBC 和 PADDING 的简单加密。

编辑:将代码更新为格式化。

最佳答案

我不认为你有任何问题。您在两个平台上获得的数据完全相同。一个版本将其显示为带符号的数据,另一个显示为未签名的数据……但位本身是相同的。

我认为使用这些 key 进行加密不会有任何问题。

关于java - AES 128 DOT NET 和 Java 兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4259082/

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