【发布时间】:2018-07-20 08:22:26
【问题描述】:
大家好,客户端应用程序正在使用 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,可以很容易地在 cryptoJs 和 Java 中使用。
【问题讨论】:
-
cryptojs 的密钥推导seems to be 一个笑话(1 轮 md5)。绝对使用 pbkdf2 或 scrypt。
-
我知道,很遗憾,客户端应用程序不在我的责任范围内。
标签: javascript java encryption aes cryptojs