3

所以我正在使用节点加密库来解密一个由我无法控制的其他软件加密的二进制文件。使用以下代码,我能够成功解密它:

decipher = crypto.createDecipheriv('aes-128-ecb', password, iv);
decrypted = decipher.update(body, 'binary', 'utf8');

这很棒,但似乎从我的解密文本末尾截断了大约 11 个字符。这很奇怪,因为它有超过 11200 个纯文本字符。现在我怀疑原因是因为我没有这条线:

decrypted += decipher.final('utf8');

但是,如果我添加该行,我会收到错误TypeError: DecipherFinal fail

我尝试了不同的输出编码并且没有 IV,但没有运气。我也读过这个问题:nodejs 加密解密有什么问题?这似乎是同一个问题,但是我不明白我应该在 openssl 命令行上采取的步骤,或者这将如何影响我的节点程序。

4

1 回答 1

4

您是否尝试将自动填充设置为 false?默认情况下,它似乎设置为 true(见下文),因此如果对方不使用默认填充(无论如何,可能是 PKCS#7 填充)进行填充,那么结果应该会失败......

decipher.setAutoPadding(auto_padding=true)

于 2013-01-31T02:05:02.290 回答