在NodeJS中加密/解密JSON数据

时间:2019-07-18 13:17:04

标签: node.js

我有一台带有端点的服务器,该端点发送由另一台服务器接收的数据,都运行NodeJS-并且我想要这样做,以便对发送的JSON数据进行加密,因此我查看了node-rsa,但由于总的来说,它是Node的新手,对我来说有点神秘。

我尝试了对发送的数据进行加密的初始功能,但是在到达第二台服务器之后,我希望仅在此处解密,以便可以对其进行正确解析,但是我不太了解如何解密它。

我的加密代码据说是这样的:

const encrypted = key.encrypt(data, 'base64');
res.json({
            status: 200,
            message: "Done",
            data: encrypted;
        });

我该如何继续使用node-rsa进行密钥对以解密发送的数据的输出?而且我认为最佳实践是将实际密钥放在.env文件中,而不是将其硬编码为代码?

1 个答案:

答案 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"}