// import the path module
const path = require('node:path');
const crypto = require('crypto');
// get the public key certificate
const CRTpath = path.basename('./PublicKey.crt');
const GenKey = crypto.randomBytes(32);
// encode key to Base 64
const base64Key = Buffer.from(GenKey).toString('base64');
const OBJ = {
username: "xxx",
password: "xasadsd",
encryptKey: base64Key,
refreshToken: "false"
}
let jsonOBJ = JSON.stringify(OBJ);
function encryptString (plaintext, publicKeyFile) {
const publicKey = fs.readFileSync(publicKeyFile, "utf8");
// publicEncrypt() method with its parameters
const encrypted = crypto.publicEncrypt(
publicKey, Buffer.from(plaintext));
return encrypted;
}
const encrypted = encryptString(jsonOBJ, CRTpath);
编辑: 我需要发送工资如下: { requestID: "string", // 这部分没问题 Payload: "" // 上面加密的值 }
到目前为止,这不起作用并返回 404。
a) 我正在尝试使用 Nodejs Crypto 模块使用 AES 256(AES/ECB/PKCS5Padding) 算法生成随机密钥。
b)我必须使用公钥(.crt)文件加密密钥 // 这部分我可以处理
c) 然后将其作为有效负载发送... // 这部分我可以处理
但是,经过多次尝试和阅读文档,我无法理解 a) 点...... 我相信我在编码为base64之前错误地完成了加密
非常欢迎任何帮助或线索...非常感谢
我正在尝试使用 Nodejs Crypto 模块使用 AES 256(AES/ECB/PKCS5Padding) 算法生成随机密钥。
这不是您正在做的事情,也不是您通常会做的事情。 (从技术上来说,直接使用 AES 生成密钥是可行的,但无论出于何种原因,您都可以找到更好的解决方案。) 您正在做的事情(我相信是正确的)正在生成一个随机 AES 密钥。 AES 密钥只是一串特定长度的随机字节。它与模式(如 ECB)或填充(如 PKCS5)无关。 AES 不生成密钥。它使用密钥。
您在这里所做的似乎是创建一个随机 AES 密钥,使用服务器的公钥对其进行加密,然后将其发送到服务器。公钥-私钥加密速度很慢。所以你只用它来加密 AES 密钥。 AES 非常快。现在您和服务器共享了密钥,您可以快速共享加密数据。您在这里展示的是一种极其常见的方法。