You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用特定加密密钥调用privateEncrypt/privateDecrypt时报EVP_CIPHER参数错误

错误原因
  • 你选择的aes-128-ecb、aes-128-ocb算法不符合OpenSSL对PKCS8格式RSA私钥加密的参数校验规则:
    • AES-128-ECB模式不需要初始化向量(IV),底层OpenSSL的EVP_CIPHER_asn1_to_param函数将加密参数序列化为ASN.1格式写入私钥时,无法匹配无IV的算法参数要求,直接抛出参数错误。
    • AES-128-OCB属于AEAD类加密模式,Node.js内置crypto模块对这类模式用于私钥加密的适配不完善,也会触发参数校验失败。
  • 额外说明:ECB模式本身安全性极低,行业通用规范也不推荐使用该模式做任何加密存储场景。
解决方法

将私钥加密的算法替换为OpenSSL兼容的、带IV的常规块加密模式即可,常用可选算法包括aes-128-cbc、aes-256-cbc、aes-256-gcm等。

修改后的可运行代码如下:

const crypto = require("crypto");
let {privateKey, publicKey} = crypto.generateKeyPairSync("rsa", {
    modulusLength: 2048,
    publicKeyEncoding: {
        type: "spki",
        format: "pem"
    },
    privateKeyEncoding: {
        type: 'pkcs8',
        format: 'pem',
        cipher: "aes-128-cbc", // 仅修改这一行即可
        passphrase: "abcdef"
    }
});
const encryptedString = crypto.privateEncrypt({
    key: privateKey,
    passphrase: "abcdef"
}, Buffer.from("The quick brown fox jumps over the lazy dog")).toString("base64");
const decryptedString = crypto.publicDecrypt(publicKey, Buffer.from(encryptedString, "base64")).toString();
console.log(`Encrypted: ${encryptedString}`);
console.log(`Decrypted: ${decryptedString}`);

修改后运行代码会正常输出加密后的Base64字符串,以及解密后的原始文本,不会再抛出参数错误。

内容的提问来源于stack exchange,提问作者Narasimhan R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:36:03