decryptString method
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');
}
}