59 lines
1.4 KiB
JavaScript
59 lines
1.4 KiB
JavaScript
const crypto = require('crypto');
|
|
|
|
const ALGORITHM = 'aes-256-cbc';
|
|
const SECRET = crypto
|
|
.createHash('sha256')
|
|
.update('PLUSFIT_SUPER_SECRET_KEY')
|
|
.digest();
|
|
|
|
/**
|
|
* Verschlüsselt Text (neu)
|
|
*/
|
|
function encrypt(text) {
|
|
if (!text) return null;
|
|
|
|
// Bereits verschlüsselt? → nicht doppelt verschlüsseln
|
|
if (text.includes(':')) return text;
|
|
|
|
const iv = crypto.randomBytes(16);
|
|
const cipher = crypto.createCipheriv(ALGORITHM, SECRET, iv);
|
|
|
|
let encrypted = cipher.update(text, 'utf8', 'hex');
|
|
encrypted += cipher.final('hex');
|
|
|
|
return iv.toString('hex') + ':' + encrypted;
|
|
}
|
|
|
|
/**
|
|
* Entschlüsselt Text (abwärtskompatibel!)
|
|
*/
|
|
function decrypt(text) {
|
|
if (!text) return null;
|
|
|
|
// ALTER KLARTEXT → einfach zurückgeben
|
|
if (!text.includes(':')) {
|
|
return text;
|
|
}
|
|
|
|
try {
|
|
const [ivHex, encrypted] = text.split(':');
|
|
|
|
const iv = Buffer.from(ivHex, 'hex');
|
|
if (iv.length !== 16) {
|
|
return text; // Sicherheitsfallback
|
|
}
|
|
|
|
const decipher = crypto.createDecipheriv(ALGORITHM, SECRET, iv);
|
|
|
|
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
|
|
decrypted += decipher.final('utf8');
|
|
|
|
return decrypted;
|
|
} catch (err) {
|
|
console.error('Decrypt-Fehler:', err.message);
|
|
return text; // NIEMALS crashen
|
|
}
|
|
}
|
|
|
|
module.exports = { encrypt, decrypt };
|