encryptJson method

String encryptJson(
  1. Map<String, dynamic> json, [
  2. String? alternativeKey
])

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