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

标签 javascript node.js encryption padding des

这是交易:

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

[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/

相关文章:

javascript - JavaScript 中双引号和单引号可以互换吗?

javascript - WebGL 着色器根据鼠标位置为纹理着色

php - 从 APK 生成屏幕截图(在线)

node.js - 如何使用 process.stdin 作为 gulp 任务的起点?

python-3.x - Python密码学: RSA Key Format is not supported

javascript - 如何创建一个使用随机生成的间隔调用函数的连续循环

javascript - Node.js Passport GoogleStrategy 如何访问 session 数据

PHP 加密和解密,而不是 base64 编码

python - 如何使用RSA方案加密字符串?

javascript - 如何使用动画在两个 html div 之间定期切换