如何使用encrypt.dart解密:字符串转Encrypted类型问题及解决
使用encrypt.dart包实现AES解密功能
我已经有一个可用的AES加密函数,接收字符串并返回加密后的Base64字符串,代码如下:
import 'package:encrypt/encrypt.dart' as myencry; String criptografaAES(String txtEncriptar) { final key = myencry.Key.fromUtf8(UserAdmConsts.KEY); final iv = myencry.IV.fromLength(16); final encrypter = myencry.Encrypter(myencry.AES(key, mode: myencry.AESMode.ecb)); final encrypted = encrypter.encrypt(txtEncriptar, iv: iv).base64; return encrypted; }
需要从MariaDB中读取加密数据进行解密,但存储的是字符串类型,而最初编写的解密函数要求参数为myencry.Encrypted类型:
String decriptografaAES(myencry.Encrypted vlEncripted) { final key = myencry.Key.fromUtf8(UserAdmConsts.KEY); final iv = myencry.IV.fromLength(16); final encrypter = myencry.Encrypter(myencry.AES(key, mode: myencry.AESMode.ecb)); final decrypted = encrypter.decrypt(vlEncripted, iv: iv); return decrypted.toString(); }
尝试直接将字符串强制转换为Encrypted类型时,触发错误:
type 'String' is not a subtype of type 'Encrypted' in type cast
通过创建Encrypted对象解决了该问题,正确的解密函数如下:
String decriptografaAES(String vlDecriptar) { myencry.Encrypted vlEncripted = myencry.Encrypted.from64(vlDecriptar); final key = myencry.Key.fromUtf8(UserAdmConsts.KEY); final iv = myencry.IV.fromLength(16); final encrypter = myencry.Encrypter(myencry.AES(key, mode: myencry.AESMode.ecb)); final decrypted = encrypter.decrypt(vlEncripted, iv: iv); return decrypted.toString(); }
感谢@Topaco提供解决思路。
内容的提问来源于stack exchange,提问作者Nan Medeiros
相关产品推荐
相关产品推荐

