我有一台带有端点的服务器,该端点发送由另一台服务器接收的数据,都运行NodeJS-并且我想要这样做,以便对发送的JSON数据进行加密,因此我查看了node-rsa,但由于总的来说,它是Node的新手,对我来说有点神秘。
我尝试了对发送的数据进行加密的初始功能,但是在到达第二台服务器之后,我希望仅在此处解密,以便可以对其进行正确解析,但是我不太了解如何解密它。
我的加密代码据说是这样的:
const encrypted = key.encrypt(data, 'base64');
res.json({
status: 200,
message: "Done",
data: encrypted;
});
我该如何继续使用node-rsa进行密钥对以解密发送的数据的输出?而且我认为最佳实践是将实际密钥放在.env文件中,而不是将其硬编码为代码?
答案 0 :(得分:0)
就像我在评论中提到的那样:问题是您想要实现什么?如果您不想通过网络以明文形式发送数据,则使用ssl(https)是更好的选择。
如果您需要手动对其进行加密,请查看以下我从node-rsa
文档中一起复制的代码段:
首先,您应该预先生成一个密钥对:
const NodeRSA = require('node-rsa');
const key = new NodeRSA({b: 512});
console.log('\nPUBLIC:');
console.log(key.exportKey('pkcs8-public-pem'));
console.log('\nPRIVATE:');
console.log(key.exportKey('pkcs1-pem'));
// ----------- OUTPUT -----------
PUBLIC:
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKAHpm1YbYK1KrD409LUWulw1tdxKbGm
oyJH5pcLDrHuZXLnPPjCGSTbjgzCZKo9urkuxPISRZCGJ82lASZ8cI8CAwEAAQ==
-----END PUBLIC KEY-----
PRIVATE:
-----BEGIN RSA PRIVATE KEY-----
MIIBOQIBAAJBAKAHpm1YbYK1KrD409LUWulw1tdxKbGmoyJH5pcLDrHuZXLnPPjC
GSTbjgzCZKo9urkuxPISRZCGJ82lASZ8cI8CAwEAAQJAfqhPYq/gTNlSpqrqDC2i
nqx+fhnEpCR9bT53FQjdYplEXgbeyfkdWkdvJLWnv3lhgWM0tNJRCc/5oxy0Jybu
MQIhAPTYy3hN533kztAaupesT51NOIiMekNJ5czyD/3koNkTAiEAp1HJ5UG4Xiwn
+nuG9uNVIcflMEP1dOzJdbN3IKIxFhUCICKKFqHg83/58AbBToMo5o49H3V7w5+M
ZCN2HjVltB8LAiApblMz9YYVq5FqsNPGppwZ9UmHHgzVmxx3jKze48qL0QIgV0I+
Hk6ZCCdobuGBzxERj1vPfCUvaH124yYKNwaUryE=
-----END RSA PRIVATE KEY-----
要进行加密,您需要公钥:
const key = new NodeRSA();
key.importKey('-----BEGIN PUBLIC KEY-----MFww...wEAAQ==-----END PUBLIC KEY-----', 'pkcs8-public-pem');
const data = { hello: 'world' };
const encrypted = key.encrypt(JSON.stringify(data), 'base64');
console.log('ENCRYPTED:');
console.log(encrypted);
res.json({
status: 'OK',
data: encrypted
});
// -------- OUTPUT ------------
ENCRYPTED:
NBsQMQycoww3wLATGMSkNk57zQVtWw5Dz0/uP+1rlzqKH1pXG6DDXsE9sf5k7TH0T09V9MNNtImCfoEgVDetWg==
要解密,您需要私钥
const key = new NodeRSA();
// TODO: read private key from file and keep it secret and secure. Do not put this private key into code!
const privatePem = '-----BEGIN RSA PRIVATE KEY-----MII...UryE=-----END RSA PRIVATE KEY-----';
key.importKey(privatePem, 'pkcs1-pem');
// read the encrypted data from service call
const encrypted = 'NBsQMQycoww3wLATGMSkNk57zQVtWw5Dz0/uP+1rlzqKH1pXG6DDXsE9sf5k7TH0T09V9MNNtImCfoEgVDetWg==';
const decryptedString = key.decrypt(encrypted, 'utf8');
console.log('\nDECRYPTED string: ');
console.log(decryptedString);
const decrypedObject = JSON.parse(decryptedString);
// --------- OUTPUT --------
DECRYPTED:
{"hello":"world"}