flutter如何实现aes256解密

在Flutter中如何实现AES256解密?我尝试使用encrypt包进行解密,但始终无法正确解密出原始数据。我的加密密钥和IV都是正确的,解密过程也没有报错,但输出的结果却是乱码。请问正确的解密流程是什么?是否需要特别注意编码或填充方式?希望能提供一个完整的示例代码。

2 回复

在Flutter中使用encrypt包实现AES256解密:

  1. 安装依赖:
dependencies:
  encrypt: ^5.0.1
  1. 解密代码:
import 'package:encrypt/encrypt.dart';

String decryptAES256(String encryptedText, String key) {
  final encrypter = Encrypter(AES(Key.fromUtf8(key)));
  final encrypted = Encrypted.fromBase64(encryptedText);
  return encrypter.decrypt(encrypted);
}

注意:确保密钥为32字节,加密模式需与加密时一致。

更多关于flutter如何实现aes256解密的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现AES-256解密,可以使用encrypt包。以下是具体实现步骤:

  1. 添加依赖pubspec.yaml中添加:
dependencies:
  encrypt: ^5.0.1
  1. 解密代码示例
import 'package:encrypt/encrypt.dart';

String decryptAES256(String encryptedText, String key, String iv) {
  try {
    // 创建加密器
    final encrypter = Encrypter(AES(
      Key.fromBase64(key), // 密钥(Base64格式)
      mode: AESMode.cbc,   // 模式(CBC常用)
    ));
    
    // 创建IV(初始化向量)
    final ivObj = IV.fromBase64(iv);
    
    // 解密
    final decrypted = encrypter.decrypt64(encryptedText, iv: ivObj);
    
    return decrypted;
  } catch (e) {
    throw Exception('解密失败: $e');
  }
}

// 使用示例
void main() {
  String encryptedData = "U2FsdGVkX1+..."; // Base64格式的加密数据
  String key = "your-32-byte-base64-key=="; // 32字节密钥(Base64编码)
  String iv = "16-byte-base64-iv==";        // 16字节IV(Base64编码)
  
  String result = decryptAES256(encryptedData, key, iv);
  print("解密结果: $result");
}

重要参数说明:

  • 密钥:必须是32字节(256位),建议使用Base64编码
  • IV:必须是16字节(128位),与加密时使用的IV一致
  • 模式:常用CBC模式,需与加密端保持一致
  • 填充:默认使用PKCS7填充

注意事项:

  1. 确保密钥和IV与加密端完全一致
  2. 处理异常避免应用崩溃
  3. 敏感信息不要硬编码在代码中

如果需要处理其他模式(如GCM)或自定义填充,可参考encrypt包的文档进行调整。

回到顶部