首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AES 128 DOT网与Java兼容性

AES 128 DOT网与Java兼容性
EN

Stack Overflow用户
提问于 2010-11-23 17:43:51
回答 1查看 1.4K关注 0票数 3

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

我所面临的问题是微不足道的,但我无法找到适当的解决办法。也许我对AES或加密的理解一般较少。

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

代码语言:javascript
复制
  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

问:考虑到密钥本身的表示方式不同,它是否会影响加密过程本身?这是简单的加密,没有CBC和填充。

编辑:更新了代码,使其看起来是格式化的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-23 17:47:35

我觉得你一点问题都没有。在这两个平台上都有完全相同的数据。一个版本显示为签名数据,另一个版本显示为无符号数据.但这些细节本身是一样的。

我认为在密码学中使用这些密钥不会有任何问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4259082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档