cid_app/lib/security_service.dart

49 lines
1.6 KiB
Dart
Raw Normal View History

2026-02-27 23:26:13 +01:00
// FILE: lib/security_service.dart
import 'package:encrypt/encrypt.dart' as encrypt;
import 'dart:convert';
import 'dart:math';
class SecurityService {
// 1. GENERATORE DI CHIAVI
static String generaChiaveSessione() {
const chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890';
Random rnd = Random.secure();
return String.fromCharCodes(Iterable.generate(32, (_) => chars.codeUnitAt(rnd.nextInt(chars.length))));
}
// 2. CRIPTAZIONE
static String criptaDati(Map<String, dynamic> dati, String chiaveSegreta) {
try {
final key = encrypt.Key.fromUtf8(chiaveSegreta);
final iv = encrypt.IV.fromLength(16);
final encrypter = encrypt.Encrypter(encrypt.AES(key));
String jsonString = jsonEncode(dati);
final encrypted = encrypter.encrypt(jsonString, iv: iv);
return "${iv.base64}:${encrypted.base64}";
} catch (e) {
return "Errore Criptazione: $e";
}
}
// 3. DECRIPTAZIONE
static Map<String, dynamic> decriptaDati(String pacchettoCriptato, String chiaveSegreta) {
try {
final parts = pacchettoCriptato.split(':');
if (parts.length != 2) throw Exception("Formato dati non valido");
final iv = encrypt.IV.fromBase64(parts[0]);
final encryptedData = encrypt.Encrypted.fromBase64(parts[1]);
final key = encrypt.Key.fromUtf8(chiaveSegreta);
final encrypter = encrypt.Encrypter(encrypt.AES(key));
final decrypted = encrypter.decrypt(encryptedData, iv: iv);
return jsonDecode(decrypted);
} catch (e) {
return {"errore": "Impossibile decriptare: $e"};
}
}
}