【发布时间】:2022-01-31 16:43:37
【问题描述】:
我正在开发一个自定义混合加密系统。我已经在服务器端处理了对称加密和非对称加密和解密。我现在需要做的就是对称解密。
我遇到了一些麻烦,因为我的客户端以字符串格式(在非对称解密之后)发送对称密钥、iv 和数据,但 CryptoJS 的编码非常敏感。就文档而言,它也非常令人困惑和模糊——至少对于一个相对较新的开发人员来说。我只是无法弄清楚 CryptoJS 对每个参数想要什么编码。我想我现在应该已经猜到了,但没有。
Docs
Some help I've gotten previously
我请求帮助以正确编码,以便我可以使用以下内容进行解密。非常感谢您的帮助。
非对称解密后的数据示例如下(丢弃密钥):
symmetricKey: bDKJVr5wFtQZaPrs4ZoMkP2RjtaYpXo5HHKbzrNELs8=,
symmetricNonce: Z8q66bFkbEqQiVbrUrts+A==,
dataToReceive: "hX/BFO7b+6eYV1zt3+hu3o5g61PFB4V3myyU8tI3W7I="
exports.transportSecurityDecryption = async function mmTransportSecurityDecryption(dataToReceive, keys) {
const JSEncrypt = require('node-jsencrypt');
const CryptoJS = require("crypto-js");
// Asymmetrically decrypt symmetric cypher data with server private key
const privateKeyQuery = new Parse.Query("ServerPrivateKey");
const keyQueryResult = await privateKeyQuery.find({useMasterKey: true});
const object = keyQueryResult[0];
const serverPrivateKey = object.get("key");
const crypt = new JSEncrypt();
crypt.setPrivateKey(serverPrivateKey);
let decryptedDataString = crypt.decrypt(keys);
let decryptedData = JSON.parse(decryptedDataString);
// Symmetrically decrypt transit data
let symmetricKey = decryptedData.symmetricKey;
let symmetricNonce = decryptedData.symmetricNonce;
// Works perfectly till here <---
var decrypted = CryptoJS.AES.decrypt(
CryptoJS.enc.Hex.parse(dataToReceive),
CryptoJS.enc.Utf8.parse(symmetricKey),
{iv: CryptoJS.enc.Hex.parse(symmetricNonce)}
);
return decrypted.toString(CryptoJS.enc.Utf8);
}
【问题讨论】:
标签: node.js encryption encoding character-encoding cryptojs