【发布时间】:2019-09-26 04:35:00
【问题描述】:
我需要帮助来找到如何匹配 C# 和 JS 中的 IV 和 KEY,
使用简单的 C# 代码:
Rijndael rijndael = Rijndael.Create();
byte[] saltArray = Encoding.ASCII.GetBytes("20190925");
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes("password", saltArray, 1000);
rijndael.Key = pdb.GetBytes(32);
rijndael.IV = pdb.GetBytes(16);
Console.WriteLine(BitConverter.ToString(rijndael.Key).Replace("-","").ToLower());
//Output rijndael.Key = c1b34ea814586db4a22dad37e11c7256322ab0eee3a14ed1898f93d7a264242f
Console.WriteLine(BitConverter.ToString(rijndael.IV).Replace("-","").ToLower());
//Output rijndael.IV = 063ead20a9d5f35ab83e1156ebe7c099
使用 CryptoJS 我可以获得与 C# 相同的 KEY,但使用 IV 我不明白为什么值不匹配
CryptoJS 代码:
let key = CryptoJS.PBKDF2('password', '20190925', {keySize:256/32, iterations:1000})
console.log('key', key.toString(CryptoJS.enc.Hex))
//Output key = 'key', 'c1b34ea814586db4a22dad37e11c7256322ab0eee3a14ed1898f93d7a264242f'
let iv = CryptoJS.PBKDF2('password', '20190925', {keySize:128/32, iterations:1000})
console.log('iv', iv.toString(CryptoJS.enc.Hex))
//Output iv = 'iv', 'c1b34ea814586db4a22dad37e11c7256'
我只是想如果rijndael.IV = pdb.GetBytes(16); 将只是得到rijndael.Key = pdb.GetBytes(32); 十六进制的一半,但值完全不同
有没有办法使用 CryptoJS 匹配 C# 的 IV?
【问题讨论】:
标签: javascript c# aes cryptojs rijndael