【发布时间】:2020-02-12 20:19:03
【问题描述】:
当我使用 Dart 的 encrypt package 使用 AES CTR 模式解密某些内容时,我得到了这个异常:
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' 作为填充会导致我描述的第一个异常。
【问题讨论】:
-
我不熟悉这个包,但我认为这是一个错误 - 你的想法是正确的,CTR 不需要填充。
标签: flutter encryption dart aes