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

时间:2016-08-12 14:24:11

标签: javascript node.js encryption padding des

这是这笔交易:

我有一个像这样结构化的数据缓冲区:

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

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

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

var buf1 = en.update(data);

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

1 个答案:

答案 0 :(得分:2)

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