This package aims to encrypt data using a combination of symmetric (AES) and asymmetric (RSA) encryption, leveraging the strengths of each. AES uses a symmetric key to encrypt the content, allowing for the processing of data of any size. RSA uses an asymmetric key, but it is more suitable for encrypting limited-size data.
import { CryptoService } from './CryptoAesRSA';
const cryptoService = new CryptoService();
async function sendEncryptedRequest(url, data) {
try {
// Encrypt the data
const { encryptedData, encryptedSessionKey, iv } = cryptoService.encrypt(JSON.stringify(data));
// Send the request with the encrypted body
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
encryptedData,
encryptedSessionKey,
iv,
}),
});
const responseData = await response.json();
console.log("Response from server:", responseData);
} catch (error) {
console.error("Encryption or request failed:", error);
}
}
// Usage example
const data = {
message: "Hello, this is a secure message!",
};
sendEncryptedRequest('https://example.com/api/secure-endpoint', data);import { CryptoService } from './CryptoAesRSA';
const cryptoService = new CryptoService();
async function handleEncryptedRequest(req, res) {
try {
const { encryptedData, encryptedSessionKey, iv } = req.body;
// Decrypt the data
const decryptedData = cryptoService.decrypt(encryptedData, encryptedSessionKey, iv);
// Process the decrypted data
const data = JSON.parse(decryptedData);
console.log("Decrypted data:", data);
// Send a response back to the client
res.json({ message: "Data received and decrypted successfully", data });
} catch (error) {
console.error("Decryption failed:", error);
res.status(500).json({ error: "Decryption failed" });
}
}
// Example usage with an Express server
import express from 'express';
const app = express();
app.use(express.json());
app.post('/api/secure-endpoint', handleEncryptedRequest);
app.listen(3000, () => {
console.log('Server is running on port 3000');
});To use this package, you need to generate RSA keys. Follow the steps below to generate a private key and a public key using OpenSSL.
openssl genrsa -out rsa_1024_priv.pem 1024openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pemThis package uses the following environment variables:
RSA_PRIVATE_KEY: PRIVATE KEY, required for decryptionRSA_PUBLIC_KEY: PUBLIC KEY, required for encryption
Create a .env file in the root directory of your project and add:
RSA_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----"
RSA_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----"
To run the tests, create a .env.test file.