【问题标题】:How to match Key & IV generated by C# and JS CryptoJS如何匹配 C# 和 JS CryptoJS 生成的 Key & IV
【发布时间】: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


    【解决方案1】:

    PBKDF2 的执行长度必须等于密钥长度和 IV 长度之和。结果分为两部分。第一部分对应key,第二部分对应IV:

    let keyLen = 256/32
    let ivLen = 128/32
    let keyiv = CryptoJS.PBKDF2('password', '20190925', {keySize:keyLen + ivLen, iterations:1000})
    let key = CryptoJS.lib.WordArray.create(keyiv.words.slice(0, keyLen));
    let iv = CryptoJS.lib.WordArray.create(keyiv.words.slice(keyLen, keyLen + ivLen));
    console.log('keyiv:', keyiv.toString())
    console.log('key  :', key.toString())
    console.log('iv   :', iv.toString())
    

    这会导致:

    keyiv: c1b34ea814586db4a22dad37e11c7256322ab0eee3a14ed1898f93d7a264242f063ead20a9d5f35ab83e1156ebe7c099
    key  : c1b34ea814586db4a22dad37e11c7256322ab0eee3a14ed1898f93d7a264242f
    iv   : 063ead20a9d5f35ab83e1156ebe7c099
    

    与 C# 代码的结果相匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-15
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      相关资源
      最近更新 更多