使用 AES 256(AES/ECB/PKCS5Padding) 算法生成随机密钥

问题描述 投票:0回答:1
// 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之前错误地完成了加密

非常欢迎任何帮助或线索...非常感谢

node.js cryptography aes
1个回答
0
投票

我正在尝试使用 Nodejs Crypto 模块使用 AES 256(AES/ECB/PKCS5Padding) 算法生成随机密钥。

这不是您正在做的事情,也不是您通常会做的事情。 (从技术上来说,直接使用 AES 生成密钥是可行的,但无论出于何种原因,您都可以找到更好的解决方案。) 您正在做的事情(我相信是正确的)正在生成一个随机 AES 密钥。 AES 密钥只是一串特定长度的随机字节。它与模式(如 ECB)或填充(如 PKCS5)无关。 AES 不生成密钥。它使用密钥。

您在这里所做的似乎是创建一个随机 AES 密钥,使用服务器的公钥对其进行加密,然后将其发送到服务器。公钥-私钥加密速度很慢。所以你只用它来加密 AES 密钥。 AES 非常快。现在您和服务器共享了密钥,您可以快速共享加密数据。您在这里展示的是一种极其常见的方法。

© www.soinside.com 2019 - 2024. All rights reserved.