Node.js:错误的密码输出

当解密hex编码的AES128输出时,Node.js奇怪地给了我错误的输出。

function decrypt_data( data, key, iv ) { var dc = crypto.createDecipheriv( 'aes-128-cbc', hex_to_str(key), hex_to_str(iv) ); var res = dc.update( data, 'hex', 'utf8' ); res += dc.final( 'utf8' ); console.log(res); return res; } 

这个function似乎完全没问题,所有的testing都通过了。 但是当我从真正的节点服务器调用它时,它会返回损坏的输出。

消息的尾巴是好的,但前32个符号是完整的垃圾。 像这样的东西:

  8   ro &    AMD Accelerated Parallel Processing" : [ "Cayman", "Cayman", "AMD Phenom(tm) II X2 555 Processor" ] }, "request" : "hello", "version" : 1 } 

不pipeinput如何,前32个字节的返回值都是错误的。

您的代码正在使用CBC模式。 在这种模式下,输出的初始块的损坏通常可能由于使用错误的IV而引起。 仔细检查你是否使用完全相同的IV来encryption和解密。 这意味着要逐字节地检查它。