gpt4 book ai didi

node.js - NodeJS aes gcm 无效套件类型错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:12 24 4
gpt4 key购买 nike

我正在尝试使用 Node 中的默认加密包并使用 aes-256-gcm 模式加密一些数据。

代码如下所示:

var crypto = require('crypto');

function encrypt() {
var sessionKey = Buffer.from(crypto.randomBytes(32));
const iv = crypto.randomBytes(16);
const key = crypto.pbkdf2Sync(sessionKey, salt, 1000, 32, 'sha512');
const cipher = crypto.createCipherIv('aes-256-gcm', key, iv);
......
}

我在尝试初始化密码时遇到错误,如上所示。错误是:

encrypter.js:77 Uncaught TypeError: invalid suite type
at Object.createCipheriv (encrypter.js:77)

我将密码更改为 aes-256-cbc 进行测试,效果很好。所以我觉得 GCM 模式可能无法工作,因为我的机器上有 OpenSSL。我确实检查过,似乎没问题。我尝试使用 id-aes256-GCM 名称,但仍然遇到相同的错误。

我的环境如下所示:

node -v:   v10.8.0

openssl version : LibreSSL 2.2.7

我尝试使用以下命令查找可用的密码

openssl list-cipher-algorithms

列表包含:id-aes128-GCM、id-aes192-GCM、id-aes256-GCM

我还检查了 openssl enc --help 并且它列出了不同名称的 gcm 命令:

Valid ciphername values:
-aes-128-gcm
-aes-192-gcm
-aes-256-gcm

PS:我不确定这些不同的值是否意味着不同。

我是 Node 新手,如果您能指出问题可能出在哪里,那就太好了。

编辑:查看 JS 控制台中失败的行。加密代码如下:

var modelist = {
ECB: require('./modes/ecb'),
CBC: require('./modes/cbc'),
CFB: require('./modes/cfb'),
OFB: require('./modes/ofb'),
CTR: require('./modes/ctr')
};
module.exports = function (crypto) {
function createCipheriv(suite, password, iv) {
var config = modes[suite];
if (!config) {
throw new TypeError('invalid suite type');
}

所以我猜测 GCM 不受这些配置的加密支持或加载?

最佳答案

正如我在上面的评论中提到的。我试图使用 React 应用程序中的“crypto”包,但当 webpack 构建单个 package.js 文件时,它没有包含在最终的包文件中。因此,为了解决这个问题,我必须安装 browserify 版本的 crypto

npm install crypto-browserify --save

并单独导入密码功能。

const mycrypto = require('crypto')
var aes = require('browserify-aes')

最终有效的代码(仅更改)是:

const iv = mycrypto.randomBytes(16);
const key = mycrypto.pbkdf2Sync(sessionKey, salt, 1000, 32, 'sha512');
const cipher = aes.createCipherIv('aes-256-gcm', key, iv);

哈希和随机字节等函数仍可从加密包中使用。只有密码函数来自浏览器化包。

感谢@Maarten 对 iv 大小和 authTag 选项的建议。

关于node.js - NodeJS aes gcm 无效套件类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51709766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com