我在 NodeJS 中有一个方法可以解密来自 C# 请求的有效负载,并且工作正常。
function _decryptMessage(_encryptedData, _encryptedDek, _iv, _privateKey, _kek){
const decrypted = crypto.privateDecrypt({
key: _privateKey,
passphrase: _kek,
padding: crypto.constants.RSA_PKCS1_PADDING
}, Buffer.from(_encryptedDek, "base64"));
const dek = decrypted.toString("utf16le");
const buff = Buffer.from(_encryptedData, "base64");
const key = Buffer.from(dek, "utf8");
const iv = Buffer.from(_iv, "utf8");
const decipher = crypto.createDecipheriv("aes-256-cbc", key, iv);
return decipher.update(buff).toString() + decipher.final().toString();
}
出于单元测试的原因,我想编写一个 NodeJS 等效方法来加密可以通过上述函数解密的 json 有效负载。 我正在尝试恢复代码,但缺少一些内容,因为我收到 error:0200009F:rsaroutines::pkcs 解码错误
这是我无法完成的未完成的方法:
function _encrypt(_publicKey, _data){
const dek = "bf3c199c2470cb477d907b1e0917c17b";
const iv = "5183666c72eec9e4";
const encryptedData= (() => {
const cipher = crypto.createCipheriv("aes-256-cbc", dek, iv);
let encryptedData = cipher.update(_data, 'utf8', 'base64');
encryptedData += cipher.final('base64');
return {
encryptedData
};
})();
const encryptedDek = crypto.publicEncrypt({
key: _publicKey,
oaepHash: "sha1",
padding: crypto.constants.RSA_PKCS1_OAEP_PADDING
}, dek).toString("base64");
return {
encryptedDek,
iv,
encryptedData
};
}
我需要帮助来完成可以按原样使用上述解密的加密方法。
在
_encrypt()
功能中:
encryptedData
必须作为字符串返回(而不是作为对象)function _encrypt(_publicKey, _data){
const dek = "bf3c199c2470cb477d907b1e0917c17b";
const iv = "5183666c72eec9e4";
const encryptedData= (() => {
const cipher = crypto.createCipheriv("aes-256-cbc", dek, iv);
let encryptedData = cipher.update(_data, 'utf8', 'base64');
encryptedData += cipher.final('base64');
return encryptedData; // Fix 3
})();
const encryptedDek = crypto.publicEncrypt({
key: _publicKey,
padding: crypto.constants.RSA_PKCS1_PADDING // Fix 2
}, Buffer.from(dek, 'utf16le')).toString("base64"); // Fix 1
return {
encryptedDek,
iv,
encryptedData
};
}
通过此更改,可以使用
_encrypt()
解密使用 _decryptMessage()
生成的密文。