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

Flutter中如何解密Firebase存储的加密字符串?

解决"Encrypt does not accept String value"解密报错问题

问题根源

你在加密时,encryptFernet方法返回的是encrypt.Encrypted实例,存储到Firebase的是该实例的base64属性(字符串格式);但解密时,encrypterFernet.decrypt()方法要求传入的是encrypt.Encrypted对象,直接传入字符串就会触发类型不匹配的报错。

修复方案

修改MyEncryptionDecryption中的decryptFernet方法,先将传入的base64字符串转换为Encrypted对象,再执行解密:

import 'package:encrypt/encrypt.dart' as encrypt;

class MyEncryptionDecryption {
  // For Fernet Encryption/Decryption
  static final keyFernet = encrypt.Key.fromUtf8('my32lengthsupersecretnooneknows1');
  static final fernet = encrypt.Fernet(keyFernet);
  static final encrypterFernet = encrypt.Encrypter(fernet);

  static encryptFernet(text) {
    final encrypted = encrypterFernet.encrypt(text);
    return encrypted;
  }

  // 修改后的解密方法
  static decryptFernet(String text) {
    // 将base64字符串转换为Encrypted对象
    final encryptedObj = encrypt.Encrypted.fromBase64(text);
    return encrypterFernet.decrypt(encryptedObj);
  }
}

调用示例

现在你可以直接传入从Firebase获取的字符串进行解密,无需额外转换:

final service = userData[index];
final cardNum = service.cardNum;
var finalCardNum = MyEncryptionDecryption.decryptFernet(cardNum);

补充说明

加密时通过encryptCardNum.base64将加密结果转为base64字符串存储,解密时就必须通过Encrypted.fromBase64()将字符串还原为Encrypted实例,才能被解密方法识别处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:10:59