24 lines
916 B
JavaScript
24 lines
916 B
JavaScript
const crypto = require('crypto');
|
|
require('dotenv').config();
|
|
|
|
const algorithm = 'aes-256-cbc';
|
|
const key = crypto.createHash('sha256').update(process.env.ENCRYPTION_SECRET).digest();
|
|
const ivLength = 16;
|
|
|
|
function encrypt(text) {
|
|
const iv = crypto.randomBytes(ivLength);
|
|
const cipher = crypto.createCipheriv(algorithm, key, iv);
|
|
const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);
|
|
return `${iv.toString('hex')}:${encrypted.toString('hex')}`;
|
|
}
|
|
|
|
function decrypt(encryptedText) {
|
|
const [ivHex, encryptedHex] = encryptedText.split(':');
|
|
const iv = Buffer.from(ivHex, 'hex');
|
|
const encrypted = Buffer.from(encryptedHex, 'hex');
|
|
const decipher = crypto.createDecipheriv(algorithm, key, iv);
|
|
const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]);
|
|
return decrypted.toString('utf8');
|
|
}
|
|
|
|
module.exports = { encrypt, decrypt }; |