Introduction to Node-RSA
Node-RSA is a widely-used library for RSA encryption and decryption in Node.js. It offers a plethora of APIs for key generation, encryption, decryption, signing, and verification, making it a robust choice for implementing security in your Node.js applications.
Generating RSA Keys
First, let’s see how to generate RSA keys using Node-RSA.
const NodeRSA = require('node-rsa'); const key = new NodeRSA({b: 512}); console.log(key.exportKey('public')); console.log(key.exportKey('private'));
Encrypting Data
Encrypting data with Node-RSA is straightforward. Here’s an example:
const text = 'Hello RSA!'; const encrypted = key.encrypt(text, 'base64'); console.log(encrypted);
Decrypting Data
Decrypting data is equally simple:
const decrypted = key.decrypt(encrypted, 'utf8'); console.log(decrypted);
Signing Data
Node-RSA allows you to sign data for integrity checks:
const sign = key.sign(text, 'base64'); console.log(sign);
Verifying Data
Verifying the signed data to ensure its integrity:
const isVerified = key.verify(text, sign, 'utf8', 'base64'); console.log(isVerified);
Exporting Keys
You can also export the keys in various formats:
const privateKey = key.exportKey('pkcs1-private-pem'); const publicKey = key.exportKey('pkcs8-public-pem'); console.log(privateKey); console.log(publicKey);
Example Application
Now, let’s build a simple application that uses these APIs for data encryption and decryption.
const express = require('express'); const bodyParser = require('body-parser'); const NodeRSA = require('node-rsa'); const app = express(); const key = new NodeRSA({b: 512}); app.use(bodyParser.json()); app.post('/encrypt', (req, res) => { const { data } = req.body; const encrypted = key.encrypt(data, 'base64'); res.send({ encrypted }); }); app.post('/decrypt', (req, res) => { const { encryptedData } = req.body; const decrypted = key.decrypt(encryptedData, 'utf8'); res.send({ decrypted }); }); app.listen(3000, () => { console.log('Server is running on port 3000'); });
This example demonstrates a simple Express server with endpoints for encrypting and decrypting data using Node-RSA.
Hash: ed14f17ce242152e7da6f5c16f33831dcfb942fc7f7736d4a988eee31c0af782