使用 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
实例处理,代码也是为可重用性而编写的,因此无论填充选项如何,都希望以相同的方式使用。
这是交易:
我有一个结构如下的数据缓冲区:
[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
实例处理,代码也是为可重用性而编写的,因此无论填充选项如何,都希望以相同的方式使用。