这是交易:
我有一个如下结构的数据缓冲区:
[39字节的header] + [body] + [padding]
(由我计算)。
如果我将它保存到文件中,我实际上可以识别结构,并且一切看起来都很好。
然后,我必须对这个缓冲区进行 DES-CBC 加密,我要做的是
a) 实例化具有 key 的 DES 包装器,并计算新的 IV(它创建的 Cipher 对象上的 autoPadding: false 也是如此)
b) 将缓冲区传递给 DES 包装器
c) 然后缓冲区被加密,如下所示:
(data是缓冲区,en是Cipher对象)
var buf1 = en.update(data);
当我在文件上输出 buf1
时(然后,在我的例子中,在套接字上)并检索它的字节,然后解密它,我获得以下结构:
[ header ][正文]
但是当我在文件上输出数据并检索它的字节时,我得到了起始结构。
我知道我还应该将 en.final()
附加到 buf1
,但就我而言,我不需要这些值,而且 autoPadding 为 false 时,它只会抛出一个错误。
最佳答案
API 为您提供了一份契约(Contract)。合约的属性之一是您需要在完成加密后调用 Cipher#final([output_encoding])
。即使填充不需要由 Cipher
实例处理,代码也是为了可重用性而编写的,因此无论填充选项如何,都希望以相同的方式使用。
关于javascript - 使用 DES (Node.js) 将数据传递到 Cipher.update 时丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38920323/