首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java AES加密得到不同的结果

Java AES加密得到不同的结果
EN

Stack Overflow用户
提问于 2018-09-23 03:15:28
回答 1查看 1.1K关注 0票数 1

我已经搜索了相当多,还没有对我的特定问题有任何清晰的认识。我有一个使用node.js的进程,它加密一些数据元素并存储十六进制字符串输出。为了不详细介绍特定过程,结果与以下在线工具here相同。

如果要在该工具中输入以下内容:

代码语言:javascript
复制
Enter text to be Encrypted:  "666326911"
Select Mode: "CBC"
Key Size in Bits: "256"
Enter IV: (Leave blank)
Enter Secret Key: "c88ba867994f440963f55b727cdd3cb7"
Output Text Format: "Hex"

加密输出将显示"C08F3DD7F5F7ACD0FC3710ADDFBF596C“。这个结果与我的过程相匹配。

我现在需要使用java以同样的方式对数据进行加密。我的代码给了我完全不同的结果,我似乎不能准确地指出我的错误发生在哪里。下面是我使用的java代码:

代码语言:javascript
复制
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
Key key = new SecretKeySpec(Hex.decodeHex("c88ba867994f440963f55b727cdd3cb7"), "AES");
IvParameterSpec iv = new IvParameterSpec(new byte[16]);
cipher.init(Cipher.ENCRYPT_MODE,key,iv);
byte[] testString = "666326911".getBytes("UTF-8");
byte[] encrypted = cipher.doFinal(testString);
System.out.println("Encrypt Hex: "+Hex.encodeHexString(encrypted));

这段代码给我一个"DA6711D88635E82B68673D9C077B070F“的结果。谁能告诉我我明显的错误或不正确的假设在哪里?

谢谢,斯科特

编辑:

将代码更改为:

代码语言:javascript
复制
SecretKeySpec key = new SecretKeySpec("c88ba867994f440963f55b727cdd3cb7".getBytes("UTF-8"), "AES");

导致"InvalidKeyException:非法密钥大小“

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-23 04:19:57

问题似乎出在SecretKeyspec上。

在在线工具上,您将其用作普通字符串。

在这里,您将其视为十六进制数字,并首先对其进行解码。

如果你尝试

代码语言:javascript
复制
Key key = new SecretKeySpec("c88ba867994f440963f55b727cdd3cb7".getBytes(), "AES");

那么你应该得到相同的结果。

这是我正在使用的代码的复制-粘贴:

代码语言:javascript
复制
try {
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    Key key = new SecretKeySpec("c88ba867994f440963f55b727cdd3cb7".getBytes("UTF-8"), "AES");
    IvParameterSpec iv = new IvParameterSpec(new byte[16]);
    cipher.init(Cipher.ENCRYPT_MODE, key, iv);

    byte[] testString = "666326911".getBytes("UTF-8");

    byte[] encrypted = cipher.doFinal(testString);
    System.out.println("Encrypt Hex: " + Hex.encodeHexString(encrypted));
} catch (Exception e) {
    System.err.println("Uh-ohh...");
    e.printStackTrace();
}

输出结果为:

代码语言:javascript
复制
Encrypt Hex: c08f3dd7f5f7acd0fc3710addfbf596c

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

https://stackoverflow.com/questions/52460037

复制
相关文章

相似问题

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