You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:05:12