具有AES默认密钥扩展功能的Crypto.JS-用Java解密

时间:2018-07-20 08:22:27

标签: javascript java encryption aes cryptojs

大家好,客户端应用程序正在使用cryptoJs Library进行AES加密

通过以下方式: CryptoJS.AES.encrypt("Message", "SampleKey123456") 从文档中:

  

对于密钥,当您传递字符串时,将其视为密码短语并用于派生实际的密钥和IV。

Java服务器正在使用JDK8 + JCE

问题:

  • 将IV放在加密字符串(前16个字节)的前面吗?我猜不是,因为它说:derive an actual key and IV
  • 如何在Java中使用相同的密钥扩展或使用哪种算法?我已经将密码短语"SampleKey123456"用作纯文本,并且如果它是实际的密钥而不是密码短语,则会使用new SecretKeySpec(keyPlain.getBytes(), "AES")
  • 另一个想法是使用诸如pbkdf之类的标准密钥扩展/派生功能,该功能可以轻松地用于cryptoJ和Java。

1 个答案:

答案 0 :(得分:0)

如果任何人对spring-security-crypto兼容版本感兴趣: http://jsfiddle.net/robertwiesner/14Lhapv0/ 它使用带有密码和Salt的PBKDF2

var password = $("[name='password']").val();
var salt = CryptoJS.enc.Utf8.parse($("[name='salt']").val());
var key = CryptoJS.PBKDF2(password, salt, {
keySize: 256 / 32,
iterations: 1024
});

在春季:return Encryptors.standard(cryptoPassword, new String(Hex.encode(Utf8.encode(cryptoKeySalt))));,其中cryptoPassword和cryptoKeySalt是常规的字符串属性。

很快将在GitHub上发布完整的示例。