我只想输入字符串并按下解密它。
这是我的应用程序,但我无法解密字符串,因为 _cipher.text
类型为“String”。它的类型应该是“加密”
onPressed: () {
setState(() {
final k = Key.fromUtf8('1234567891011123');
final iv = IV.fromLength(16);
final encrypter = Encrypter(AES(k));
final decrypted = encrypter.decrypt(_cipher.text, iv: iv);
_plain.text = decrypted;
});
},
我不想使用final crypted = encrypter.encrypt(_cipher.text, iv: iv);
,因为它是加密的。
最佳答案
你不能直接解密字符串。您需要将加密后的内容传入解密中,否则在大多数情况下会出现 block 大小错误。
import 'package:encrypt/encrypt.dart';
void main() {
final cipher = 'Lorem ipsum dolor sit amet';
final k = Key.fromUtf8('1234567891011123');
final iv = IV.fromLength(16);
final encrypter = Encrypter(AES(k));
final encrypted = encrypter.encrypt(cipher, iv: iv);
final decrypted = encrypter.decrypt(encrypted, iv: iv);
print(encrypted.base64);
print(decrypted);
}
如果您已手动将密码设置为 base16
或 base64
字符串,则可以执行以下操作:
import 'package:encrypt/encrypt.dart';
void main() {
final cipher = 'Xg4+gtUDU0Hd9uMUWU7IJtjxvocKzIOJwumyzbY5n40=';
final k = Key.fromUtf8('1234567891011123');
final iv = IV.fromLength(16);
final encrypter = Encrypter(AES(k));
final decrypted = encrypter.decrypt(Encrypted.fromBase64(cipher), iv: iv);
print(decrypted);
}
编辑:如果您从用户处获取密码输入,则需要使用加密器验证它是否是 base16
或 base64
,然后您才能继续解密使用Encrypted.fromBase64(cipher)
或Encrypted.fromBase16(cipher)
关于flutter - 解密即将到来的文本 flutter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69698919/