在解密十六进制编码的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;
}
这个功能似乎完全没问题,所有测试都通过了。但是当我从真实节点服务器调用它时,它会返回损坏的输出。
消息的尾部没问题,但前32个符号是完全垃圾。像这样:
�8���ro�&����AMD Accelerated Parallel Processing" : [ "Cayman", "Cayman", "AMD Phenom(tm) II X2 555 Processor" ] }, "request" : "hello", "version" : 1 }
无论输入什么,返回值在前32个字节中始终是错误的。
答案 0 :(得分:2)
您的代码正在使用CBC模式。在这种模式下,输出的初始块的损坏通常可以通过使用错误的IV引起。请仔细检查您使用完全相同的IV进行加密和解密。这意味着逐字节地检查它。