decryptString method

String decryptString(
  1. String ciphertext
)

Implementation

String decryptString(String ciphertext) {
  List<int> data = base64.decode(ciphertext).toList();
  List<int> decrypted = [];

  for (int i = 0; i < data.length; i += 8) {
    List<int> block = decipher([
      (data[i] << 24) |
          (data[i + 1] << 16) |
          (data[i + 2] << 8) |
          data[i + 3],
      (data[i + 4] << 24) |
          (data[i + 5] << 16) |
          (data[i + 6] << 8) |
          data[i + 7]
    ]);
    decrypted.addAll([
      (block[0] >> 24) & 0xFF,
      (block[0] >> 16) & 0xFF,
      (block[0] >> 8) & 0xFF,
      block[0] & 0xFF,
      (block[1] >> 24) & 0xFF,
      (block[1] >> 16) & 0xFF,
      (block[1] >> 8) & 0xFF,
      block[1] & 0xFF
    ]);
  }

  // Find the index of the last non-zero byte
  int paddingStart = decrypted.lastIndexWhere((byte) => byte != 0);

  // If padding was added, remove only trailing zero bytes
  if (paddingStart != -1 && paddingStart + 1 < decrypted.length) {
    decrypted = decrypted.sublist(0, paddingStart + 1);
  }

  // Attempt to decode as UTF-8
  try {
    return utf8.decode(decrypted);
  } catch (e) {
    throw FormatException('Decrypted data is not valid UTF-8: $e');
  }
}