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

Flutter AES解密报错:输入String类型密文无法匹配要求的Encrypted类型

解决方法

你使用的encrypt库decrypt方法第一个入参要求为Encrypted类型,不能直接传入密文字符串,只需将输入的密文字符串按照加密时的编码格式(通常为base64或十六进制hex)转换为Encrypted实例即可,无需调用encrypt方法。

代码修改示例

首先确认你的密文编码格式,选择对应转换方法:

  • 若密文为base64编码(绝大多数场景默认使用该格式),使用Encrypted.fromBase64()转换
  • 若密文为十六进制hex编码,使用Encrypted.fromBase16()转换

修改后的完整代码如下:

onPressed: ()  {
  setState(() {
    final k = Key.fromUtf8('1234567891011123');
    // 注意:这里的IV需要和加密时使用的IV完全一致,当前IV.fromLength(16)生成的是全0 IV
    final iv = IV.fromLength(16);
    final encrypter = Encrypter(AES(k));
    // 按密文编码格式选下面其中一行
    final decrypted = encrypter.decrypt(Encrypted.fromBase64(_cipher.text), iv: iv);
    // final decrypted = encrypter.decrypt(Encrypted.fromBase16(_cipher.text), iv: iv);
    _plain.text = decrypted;
  });
},

注意事项

  • 必须保证密钥、IV、加密模式、填充规则和加密时的参数完全一致,否则会解密失败或得到乱码
  • 若加密时未使用默认的CBC模式和PKCS7填充,需要在初始化AES实例时显式指定,示例:
    final encrypter = Encrypter(AES(k, mode: AESMode.ecb, padding: 'PKCS5'));
    

内容的提问来源于stack exchange,提问作者Mohammad Alamoudi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:57:00