插件窝 干货文章 Flutter如何实现与JavaScript相同的AES加密功能?

Flutter如何实现与JavaScript相同的AES加密功能?

加密 JavaScript 密钥 CryptoJS 612    来源:    2025-03-19

在Flutter中实现与JavaScript相同的AES加密功能,可以使用encrypt包。这个包提供了AES加密算法的实现,并且可以与JavaScript中的加密结果保持一致。

以下是一个简单的示例,展示如何在Flutter中使用encrypt包进行AES加密,并确保与JavaScript的加密结果一致。

1. 添加依赖

首先,在pubspec.yaml文件中添加encrypt包的依赖:

dependencies:
  flutter:
    sdk: flutter
  encrypt: ^5.0.0

然后运行flutter pub get来安装依赖。

2. 实现AES加密

接下来,编写Flutter代码来实现AES加密:

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

void main() {
  // 密钥和IV(初始化向量)
  final key = Key.fromUtf8('your-32-character-key'); // 32字符的密钥
  final iv = IV.fromUtf8('your-16-character-iv');   // 16字符的IV

  // 创建AES加密器
  final encrypter = Encrypter(AES(key, mode: AESMode.cbc));

  // 要加密的文本
  final plainText = 'Hello, World!';

  // 加密
  final encrypted = encrypter.encrypt(plainText, iv: iv);

  // 输出加密后的结果(Base64编码)
  print('Encrypted: ${encrypted.base64}');

  // 解密
  final decrypted = encrypter.decrypt(encrypted, iv: iv);

  // 输出解密后的结果
  print('Decrypted: $decrypted');
}

3. JavaScript中的AES加密

为了确保Flutter和JavaScript的加密结果一致,你需要在JavaScript中使用相同的密钥和IV进行加密。以下是一个使用crypto-js库的JavaScript示例:

const CryptoJS = require('crypto-js');

// 密钥和IV
const key = CryptoJS.enc.Utf8.parse('your-32-character-key'); // 32字符的密钥
const iv = CryptoJS.enc.Utf8.parse('your-16-character-iv');   // 16字符的IV

// 要加密的文本
const plainText = 'Hello, World!';

// 加密
const encrypted = CryptoJS.AES.encrypt(plainText, key, {
  iv: iv,
  mode: CryptoJS.mode.CBC,
  padding: CryptoJS.pad.Pkcs7
});

// 输出加密后的结果(Base64编码)
console.log('Encrypted: ' + encrypted.toString());

// 解密
const decrypted = CryptoJS.AES.decrypt(encrypted, key, {
  iv: iv,
  mode: CryptoJS.mode.CBC,
  padding: CryptoJS.pad.Pkcs7
});

// 输出解密后的结果
console.log('Decrypted: ' + decrypted.toString(CryptoJS.enc.Utf8));

4. 确保一致性

为了确保Flutter和JavaScript的加密结果一致,需要注意以下几点:

  • 密钥和IV:确保在Flutter和JavaScript中使用相同的密钥和IV。
  • 加密模式:确保使用相同的加密模式(如CBC)。
  • 填充方式:确保使用相同的填充方式(如PKCS7)。
  • 编码方式:确保加密后的结果使用相同的编码方式(如Base64)。

通过以上步骤,你可以在Flutter中实现与JavaScript相同的AES加密功能。