使用 DES (Node.js) 将数据传递给 Cipher.update 时丢失数据

Loss of data when passing it to Cipher.update while using DES (Node.js)

这是交易:

我有一个结构如下的数据缓冲区:

[39 bytes of header] + [body] + [padding](我算的)。 如果我把它保存到一个文件中,我实际上可以识别结构,而且一切似乎都很好。

然后,我必须对这个缓冲区进行DES-CBC加密,我所做的是

a) 实例化具有密钥的 DES 包装器,并计算新的 IV(autoPadding:它创建的 Cipher 对象上的 false)
b) 将缓冲区传递给 DES 包装器
c) 缓冲区然后按如下方式加密: (data是buffer,en是Cipher对象)

var buf1 = en.update(data);

当我在一个文件上输出 buf1(然后,在我的例子中,在一个套接字上)并检索它的字节,然后解密它我得到以下结构: [header][body] 但是当我在文件上输出数据并检索它的字节时,我得到了起始结构。 我知道我还应该将 en.final() 附加到 buf1,但在我的情况下我不需要这些值,而且 autoPadding 为 false 它只会引发错误。

API为您提供合同。合约的一个属性是当你完成加密时你需要调用Cipher#final([output_encoding])。即使填充不需要由 Cipher 实例处理,代码也是为可重用性而编写的,因此无论填充选项如何,都希望以相同的方式使用。