写入密码时出现 authTagLength 错误

authTagLength error with writing to cipher

我有以下代码,我正在尝试使用 aes192 创建和写入密码,但不推荐使用 createCipher。

有人可以帮助我如何 运行 在旧的 nodejs 上 运行 时间将吐出准确的输出。

const crypto = require("crypto");
const cipher = crypto.createCipher("aes192", "abc");
let encrypted = "";
cipher.on("end", function () {
    console.log(encrypted)
});
cipher.write("abc");
cipher.end();

这真的是你想要做的吗?有几个原因可以避免弃用 API 以及提供的示例中使用的密码位大小和模式。

  1. 已弃用 crypto.createCipher()/crypto.createDecipher() 的 API 是为了允许引入独特的 IV as outlined in various security research such as NIST SP 800-38A
  2. AES 的 192 密钥大小,虽然与 AES-128 相比尚未过时,但仍不是推荐的密钥大小; 256,参考 NIST SP 800-131A.
  3. node.js 实现的 OpenSSL(默认)加密库默认为 CBC mode which has known issues as outlined here

既然我已经向您提供了不使用当前实现的原因,您应该能够使用 nvm tool 在 node.js.

的版本之间快速切换
$ nvm v6

根据 node.js crypto docs,它在 <10 之前的任何内容中都已弃用。我相信 'warning' 弃用开始出现在版本 >=8 如果没记错的话。

作为记录,您应该使用以下内容:AES 256、GCM 模式和每个密文 IV。

使用 npm 的快速包搜索将产生相当多的现有模块来提供帮助,但是我推荐我自己的库 kruptein。它实现强大的密钥派生,支持多个字符集并使用所有推荐的行业标准。