encryptJson method
Funcion Utilizada para encriptar un json
como opcional se puede enviar una clave alternativa alternativeKey si
esta cumple con los requisitos de longitud la funcion va a utilizar esta
nueva clave para encriptar el json, si este paramentro no se envia se
utilizara la clave por defecto
Implementation
String encryptJson(Map<String, dynamic> json, [String? alternativeKey]) {
try {
Uint8List? keyAlternative;
if (alternativeKey != null) {
keyAlternative = Uint8List.fromList(alternativeKey.codeUnits);
validateKey(keyAlternative);
}
final iv = UtilFlutterSecurityProvider.generateRandomIV(
12); // IV size for GCM is typically 12 bytes
final plaintext = Uint8List.fromList(
utf8.encode(jsonEncode(json))); // Converting to Uint8List
final gcmCipher = GCMBlockCipher(AESEngine());
gcmCipher.init(
true,
AEADParameters(
KeyParameter((keyAlternative == null) ? key : keyAlternative),
128,
iv,
Uint8List(0))); // 128 bit MAC tag
final ciphertextWithMac = gcmCipher
.process(plaintext); // Should work now as plaintext is Uint8List
final ivAndCiphertext = Uint8List(iv.length + ciphertextWithMac.length)
..setRange(0, iv.length, iv)
..setRange(
iv.length, iv.length + ciphertextWithMac.length, ciphertextWithMac);
return base64Encode(ivAndCiphertext);
} catch (error) {
return 'Error: $error';
}
}