node.js解密AES 128 ECB

时间:2018-06-18 09:38:14

标签: node.js encryption aes ecb

我尝试在节点上使用AES 128-ecb解密base64格式令牌。

:ed9d26Z0JES0X52Q(更改了一些字符,但长度正确)

令牌:O4girrZ2YeLSE1sZ4FSIvp3Edm1GiwBLHmvDIEYCf + xkvbxP6EfYjy + PEB2kaYe0606EyPmlCC0iExVRq9e3Iw ==

  decodeToken(token) {
    var key = new Buffer(exchangeKey, 'hex')
    var encrypted = new Buffer(token, 'base64')
    decipher = crypto.createDecipheriv("aes-128-ecb", key, '')
    decipher.setAutoPadding(false)
    result = decipher.update(encrypted).toString();
    return result;
  }

给出:

  

crypto.js:239 this._handle.initiv(cipher,toBuf(key),toBuf(iv));                  ^

     

错误:密钥长度无效       在错误(本机)       在新的Decipheriv(crypto.js:239:16)       在Object.Decipheriv(crypto.js:236:12)

经过一番搜索,我发现了这个:

// https://github.com/nodejs/node-v0.x-archive/issues/4744#issuecomment-25460050
var aesEcb = new MCrypt('rijndael-128', 'ecb')
aesEcb.open(exchangeKey);
var ciphertext = new Buffer(token, 'base64');
var plaintext = aesEcb.decrypt(ciphertext).toString();
return plaintext

什么回馈

f9712fa5-da4a-49fe-b81f-b48d8cfabf91275RAODW24RS

看起来像预期的格式和长度,但注意最后的有线字符。

我也可以使用这个解决方案(并修剪额外的字符),但我想

  • 知道这些角色是什么
  • 交叉引用两个结果
  • 只使用一个npm包(加密)

1 个答案:

答案 0 :(得分:1)

当您打算将各个十六进制字符用作关键字节时,您将该键解码为十六进制。不要这样做。您还禁用了填充。启用填充以删除奇怪的字符。