Javascript 带有AES默认密钥扩展的Crypto.JS-在Java中解密

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”作为纯文本

Helo伙计们,一个客户端应用程序正在使用AES加密

以以下方式:
CryptoJS.AES.encrypt(“Message”、“SampleKey123456”
) 从文件中:

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

Java服务器使用JDK8+JCE

问题:

  • IV是否在加密字符串(前16个字节)前加前缀?我想不会,因为它说:
    派生一个实际的密钥和IV
  • 如何在Java中使用相同的密钥扩展,或者它是哪种算法?我将密码短语
    “SampleKey123456”
    作为纯文本,如果它是实际的密钥而不是密码短语,我将使用
    新的SecretKeySpec(keyplane.getBytes(),“AES”)
  • 另一个想法是使用标准的密钥扩展/派生函数,如pbkdf,它可以很容易地在cryptoJs和Java中使用
如果有人对spring security crypto兼容版本感兴趣: 它使用带密码和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
});
春季:
returnencryptors.standard(cryptoPassword,new
字符串(十六进制编码(Utf8.encode(cryptoKeySalt))其中cryptoPassword和CryptoKeyAlt是常规字符串属性


不久将在GitHub上发布完整的示例

cryptojs的密钥派生是一个笑话(1轮md5)。一定要使用pbkdf2或scrypt。我知道,遗憾的是,客户端应用程序不是我的责任。