Я получаю это исключение, когда использую пакет шифрования Дарта для расшифровки чего-либо с использованием режима CTR AES:
E/flutter (19095): Invalid argument(s): Input data length must be a multiple of cipher's block size
E/flutter (19095): #0 PaddedBlockCipherImpl.process (package:pointycastle/padded_block_cipher/padded_block_cipher_impl.dart:55:9)
E/flutter (19095): #1 AES.decrypt (package:encrypt/src/algorithms/aes.dart:38:20)
Вот мой код:
final encrypter = encrypt.Encrypter(encrypt.AES(key, mode: encrypt.AESMode.ctr));
final decrypted = encrypter.decrypt(encrypt.Encrypted.fromBase16(cipher), iv: iv);
cipher
- шестнадцатеричная строка длины 10. Я думал, что режим AES CTR не требует заполнения. Если это требует заполнения, с чем мне заполнять? Я попробовал это:
final decrypted = encrypter.decrypt(encrypt.Encrypted.fromBase16(cipher.padRight(16, null)), iv: iv);
Но я получаю следующее исключение:
E/flutter (19095): FormatException: Invalid radix-16 number (at character 1)
E/flutter (19095): nu
E/flutter (19095): ^
Использование '0'
в качестве отступа приводит к первому описанному мною исключению.