@vmatteus/crypto-aes-rsa
v1.0.2
Published
Package for encrypting the body with combined RSA and AES encryption.
Maintainers
Readme
Combined Symmetric and Asymmetric Encryption (AES and RSA)
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.
Example of an Encrypted Request
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);Example of Decrypting on Backend with TypeScript
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');
});Generate RSA Keys
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.
Generate Private Key
openssl genrsa -out rsa_1024_priv.pem 1024Generate Public Key
openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pemEnvironment Variables
This package uses the following environment variables:
RSA_PRIVATE_KEY: PRIVATE KEY, required for decryptionRSA_PUBLIC_KEY: PUBLIC KEY, required for encryption
Configuration Example
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.
