1

解密十六进制编码的 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 个字节的返回值总是错误的。

4

1 回答 1

2

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

于 2011-08-24T15:23:17.183 回答