Node.js:错误的加密输出

时间:2011-08-24 13:52:28

标签: node.js encryption aes node-crypto

在解密十六进制编码的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个字节中始终是错误的。

1 个答案:

答案 0 :(得分:2)

您的代码正在使用CBC模式。在这种模式下,输出的初始块的损坏通常可以通过使用错误的IV引起。请仔细检查您使用完全相同的IV进行加密和解密。这意味着逐字节地检查它。