Flutter数据加密插件dart_encrypter的使用

Flutter数据加密插件dart_encrypter的使用

Encrypter for Dart & Flutter

特性

  • 使用给定的密钥和初始化向量(IV)加密/解密字符串。它还包括内置的密码生成器,并且如果需要,可以使用彩色框输出。

使用方法

1. 添加依赖到pubspec.yaml文件

在您的项目中添加以下依赖:

dart_encrypter: ^1.0.4

2. 获取依赖

保存pubspec.yaml文件后,运行以下命令获取依赖:

pub get

如果您使用的是Flutter项目,可以在控制台中运行以下命令:

flutter pub get

3. 导入包

在需要使用加密功能的文件中导入dart_encrypter包:

import 'package:dart_encrypter/dart_encrypter.dart';

完整示例

下面是一个完整的示例,展示了如何使用dart_encrypter进行数据加密和解密。

import 'package:dart_encrypter/dart_encrypter.dart';
import 'package:logbox_color/extensions.dart';
import 'package:logbox_color/logbox_color.dart';

void main() {
  // 生成32字符长度的密钥
  final _key = Security.generatePassword(true, true, true, true, 32);
  
  // 生成16字符长度的初始化向量
  final iv = Security.generatePassword(true, true, true, true, 16);

  // 打印生成的密钥
  printLog("Key: $_key", LogLevel.verbose);

  // 打印生成的初始化向量
  printLog("IV: $iv", LogLevel.verbose);

  // 示例文本进行加密
  var item = "Hello my dear !".encryptMyData(_key!, iv!);

  // 如果加密结果不为空,则打印加密后的文本
  if (item != null) {
    printLog("Encrypted text: $item", LogLevel.info);
    
    // 解密文本
    var deItem = item.decryptMyData(_key, iv);
    
    // 打印解密后的文本
    printLog("Decrypted text: $deItem", LogLevel.info);
  }

  // 打印不同长度和类型的密码
  printLog(
      "Password 1: ${Security.generatePassword(true, true, true, true, 16)}",
      LogLevel.debug); // 长度为16的密码
  
  printLog(
      "Password 2: ${Security.generatePassword(false, true, false, true, 12)}",
      LogLevel.debug); // 长度为12的密码
  
  printLog(
      "Password 3: ${Security.generatePassword(true, true, false, false, 25)}",
      LogLevel.debug); // 长度为25的密码
  
  printLog(
      "Password 4: ${Security.generatePassword(false, false, true, true, 12)}",
      LogLevel.debug); // 长度为12的密码
  
  printLog(
      "Password 5: ${Security.generatePassword(true, false, false, false, 12)}",
      LogLevel.debug); // 长度为12的密码
  
  printLog(
      "Password 6: ${Security.generatePassword(false, true, false, false, 12)}",
      LogLevel.debug); // 长度为12的密码
  
  // 生成带前缀的密码
  printLog(
      "Password with prefix: ${Security.generatePasswordwithPrefix(Security.generatePassword(true, true, false, false, 25)!, "xert", "_")}",
      LogLevel.debug); // 长度为25的带前缀的密码
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用dart_encrypter插件进行数据加密和解密的示例代码。这个示例将展示如何使用AES(高级加密标准)算法对数据进行加密和解密。

首先,确保你已经在pubspec.yaml文件中添加了dart_encrypter依赖:

dependencies:
  flutter:
    sdk: flutter
  dart_encrypter: ^3.0.0  # 请检查最新版本号

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

接下来,你可以在你的Dart文件中使用以下代码进行数据加密和解密:

import 'package:flutter/material.dart';
import 'package:dart_encrypter/dart_encrypter.dart';
import 'package:pointycastle/export.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Data Encryption Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: EncryptDecryptExample(),
        ),
      ),
    );
  }
}

class EncryptDecryptExample extends StatefulWidget {
  @override
  _EncryptDecryptExampleState createState() => _EncryptDecryptExampleState();
}

class _EncryptDecryptExampleState extends State<EncryptDecryptExample> {
  final TextEditingController _plainTextController = TextEditingController();
  final TextEditingController _encryptedTextController = TextEditingController();
  final TextEditingController _decryptedTextController = TextEditingController();
  late Key _key;
  late IV _iv;

  @override
  void initState() {
    super.initState();
    // 生成一个随机的密钥和初始化向量(IV)
    _key = Key.fromUtf8('my-secret-32-characters-key-123456'); // 确保密钥是32字节长
    _iv = IV.fromUtf8('my-init-vector-16-bytes-1234'); // 确保IV是16字节长
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        TextField(
          controller: _plainTextController,
          decoration: InputDecoration(labelText: 'Plain Text'),
          maxLines: 4,
        ),
        SizedBox(height: 16),
        ElevatedButton(
          onPressed: () {
            setState(() {
              String plainText = _plainTextController.text;
              final encrypter = Encrypter(AES(_key));
              final encrypted = encrypter.encrypt(plainText);
              _encryptedTextController.text = encrypted.base64;

              // 解密以验证加密结果
              final decrypted = encrypter.decrypt64(encrypted.base64);
              _decryptedTextController.text = decrypted;
            });
          },
          child: Text('Encrypt'),
        ),
        SizedBox(height: 16),
        Text('Encrypted Text:', style: TextStyle(fontWeight: FontWeight.bold)),
        Text(_encryptedTextController.text),
        SizedBox(height: 16),
        Text('Decrypted Text:', style: TextStyle(fontWeight: FontWeight.bold)),
        Text(_decryptedTextController.text),
      ],
    );
  }

  @override
  void dispose() {
    _plainTextController.dispose();
    _encryptedTextController.dispose();
    _decryptedTextController.dispose();
    super.dispose();
  }
}

代码说明:

  1. 依赖导入:首先,我们导入了dart_encrypterpointycastle包。pointycastle是一个加密库,dart_encrypter基于它提供了更高级的API。

  2. 密钥和IV生成:在initState方法中,我们生成了一个32字节长的密钥和一个16字节长的初始化向量(IV)。在实际应用中,你应该使用更安全的方法来生成和存储这些值。

  3. 加密和解密逻辑:在点击“Encrypt”按钮时,我们从_plainTextController获取明文,然后使用AES算法对其进行加密。加密后的数据被转换为Base64编码的字符串并显示在界面上。同时,我们也对加密后的数据进行解密,以验证加密过程的正确性,并将解密后的明文显示在界面上。

  4. UI布局:我们使用Flutter的ColumnTextFieldElevatedButton等组件来构建用户界面。

  5. 资源释放:在dispose方法中,我们释放了文本控制器的资源。

这个示例展示了如何使用dart_encrypter插件进行基本的AES加密和解密操作。在实际应用中,你可能需要更复杂的逻辑来处理密钥管理和加密数据的存储。

回到顶部