我正在尝试使用节点中的默认加密包并使用 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 列表密码算法
该列表包含: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 不支持或不被这些配置的加密加载?