Javascript 带有AES默认密钥扩展的Crypto.JS-在Java中解密
Helo伙计们,一个客户端应用程序正在使用AES加密 以以下方式:Javascript 带有AES默认密钥扩展的Crypto.JS-在Java中解密,javascript,java,encryption,aes,cryptojs,Javascript,Java,Encryption,Aes,Cryptojs,Helo伙计们,一个客户端应用程序正在使用AES加密 以以下方式: CryptoJS.AES.encrypt(“Message”、“SampleKey123456”) 从文件中: 对于密钥,当您传递字符串时,它被视为密码短语,并用于派生实际密钥和IV Java服务器使用JDK8+JCE 问题: IV是否在加密字符串(前16个字节)前加前缀?我想不会,因为它说:派生一个实际的密钥和IV 如何在Java中使用相同的密钥扩展,或者它是哪种算法?我将密码短语“SampleKey123456”作为纯文本
CryptoJS.AES.encrypt(“Message”、“SampleKey123456”
)
从文件中:
对于密钥,当您传递字符串时,它被视为密码短语,并用于派生实际密钥和IV
Java服务器使用JDK8+JCE
问题:
- IV是否在加密字符串(前16个字节)前加前缀?我想不会,因为它说:
派生一个实际的密钥和IV
- 如何在Java中使用相同的密钥扩展,或者它是哪种算法?我将密码短语
作为纯文本,如果它是实际的密钥而不是密码短语,我将使用“SampleKey123456”
新的SecretKeySpec(keyplane.getBytes(),“AES”)
- 另一个想法是使用标准的密钥扩展/派生函数,如pbkdf,它可以很容易地在cryptoJs和Java中使用李>
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
});
春季:returnencryptors.standard(cryptoPassword,new
字符串(十六进制编码(Utf8.encode(cryptoKeySalt))代码>其中cryptoPassword和CryptoKeyAlt是常规字符串属性
不久将在GitHub上发布完整的示例 cryptojs的密钥派生是一个笑话(1轮md5)。一定要使用pbkdf2或scrypt。我知道,遗憾的是,客户端应用程序不是我的责任。