Vertragsverwaltung_Plusfit24/utils/crypto.js
2026-02-10 15:29:29 +00:00

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 };