这是这笔交易:
我有一个像这样结构化的数据缓冲区:
[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,只会引发错误。
答案 0 :(得分:2)
API为您提供合同。合同的一个属性是,您需要在加密完成后调用Cipher#final([output_encoding])
。即使填充不需要由Cipher
实例处理,代码也是为了重用而编写的,因此无论填充选项如何都希望以相同的方式使用。