Flutter AES CBC加密解密插件aes_cbc_cipher的使用

Flutter AES CBC加密解密插件aes_cbc_cipher的使用

AESCBCCipher

AESCBCCipher 是一个单例类,它提供了使用 encrypt 包的 AES 加密和解密功能。它用于使用 AES(高级加密标准)算法在 CBC(密码块链接)模式下加密和解密数据。

函数

init

初始化 AESCBCCipher,并传入一个32字节的密钥和一个16字节的初始化向量(IV)。它接受以下参数:

  • key(必需):用于加密和解密的32字节密钥。
  • iv(必需):用于加密和解密的16字节初始化向量。
  • padding(可选):用于加密和解密的填充类型,默认为 AESPaddingType.pkcs7

encrypt

加密给定的明文,并以 Base64 格式返回加密后的字符串。它接受以下参数:

  • plainText:要加密的字符串。
  • isTest(可选):一个布尔标志,指示加密是否用于测试目的,默认值为 false

decrypt

解密给定的加密文本,并返回解密后的字符串。它接受以下参数:

  • encryptedText:要解密的字符串。
  • isTest(可选):一个布尔标志,指示解密是否用于测试目的,默认值为 false

decrypt 函数可能会抛出以下异常:

  • FormatException:如果给定的 encryptedText 不是 Base64 格式。
  • ArgumentException:如果给定的 encryptedText 不是正确的格式。
  • StateError:如果给定的 encryptedText 不是正确的格式。

请注意,在使用 encryptdecrypt 函数之前,必须调用 init 函数。如果没有调用 init 函数,将会抛出断言错误。

AESCBCCipher 类还有私有函数,这些函数用于内部的测试和初始化。


示例代码

以下是一个完整的示例代码,展示了如何使用 aes_cbc_cipher 插件进行 AES CBC 加密和解密。

import 'package:aes_cbc_cipher/aes_cbc_cipher.dart';

// 定义明文
String get _plainText => 'Hello World!';

void main(List<String> _) {
  //* MARK: - 初始化
  AESCBCCipher().init(
    key: '************************', // 替换为你的密钥
    iv: '****************', // 替换为你的初始化向量
  );

  //* MARK: - 加密
  print("Encrypting '$_plainText'...");
  final String encryptedText = AESCBCCipher().encrypt(_plainText);
  print("Encrypted Text: $encryptedText");

  //* MARK: - 解密
  final String? decryptedText = AESCBCCipher().decrypt(encryptedText);
  print("Decrypting '$encryptedText'...");
  Future.delayed(
    const Duration(seconds: 2),
    () {
      //* MARK: - 结果
      print("Decrypted Text: $decryptedText");
    },
  );
}

运行结果

运行上述代码后,你将看到类似以下的输出:

Encrypting 'Hello World!...
Encrypted Text: U2FsdGVkX1+Y+... // Base64 编码的加密文本
Decrypting 'U2FsdGVkX1+Y+...
Decrypted Text: Hello World!

更多关于Flutter AES CBC加密解密插件aes_cbc_cipher的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter AES CBC加密解密插件aes_cbc_cipher的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


aes_cbc_cipher 是一个用于在 Flutter 中进行 AES CBC 加密和解密的插件。以下是如何使用该插件进行加密和解密的步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  aes_cbc_cipher: ^0.0.1  # 请使用最新版本

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

2. 导入包

在你的 Dart 文件中导入 aes_cbc_cipher 包:

import 'package:aes_cbc_cipher/aes_cbc_cipher.dart';

3. 加密数据

使用 AesCbcCipher 类进行加密。你需要提供一个密钥(key)和初始化向量(IV)。

void encryptData() async {
  final key = 'your_32_byte_key_here'; // 32字节的密钥
  final iv = 'your_16_byte_iv_here';   // 16字节的初始化向量
  final plainText = 'Hello, World!';

  final encrypted = await AesCbcCipher.encrypt(plainText, key, iv);
  print('Encrypted: $encrypted');
}

4. 解密数据

使用 AesCbcCipher 类进行解密。你需要提供相同的密钥和初始化向量。

void decryptData() async {
  final key = 'your_32_byte_key_here'; // 32字节的密钥
  final iv = 'your_16_byte_iv_here';   // 16字节的初始化向量
  final encryptedText = '...'; // 加密后的数据

  final decrypted = await AesCbcCipher.decrypt(encryptedText, key, iv);
  print('Decrypted: $decrypted');
}

5. 完整示例

以下是一个完整的示例,展示了如何加密和解密数据:

import 'package:flutter/material.dart';
import 'package:aes_cbc_cipher/aes_cbc_cipher.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('AES CBC Cipher Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: encryptData,
                child: Text('Encrypt Data'),
              ),
              ElevatedButton(
                onPressed: decryptData,
                child: Text('Decrypt Data'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void encryptData() async {
    final key = 'your_32_byte_key_here'; // 32字节的密钥
    final iv = 'your_16_byte_iv_here';   // 16字节的初始化向量
    final plainText = 'Hello, World!';

    final encrypted = await AesCbcCipher.encrypt(plainText, key, iv);
    print('Encrypted: $encrypted');
  }

  void decryptData() async {
    final key = 'your_32_byte_key_here'; // 32字节的密钥
    final iv = 'your_16_byte_iv_here';   // 16字节的初始化向量
    final encryptedText = '...'; // 加密后的数据

    final decrypted = await AesCbcCipher.decrypt(encryptedText, key, iv);
    print('Decrypted: $decrypted');
  }
}
回到顶部