Flutter数据加密插件encryptions的使用

Flutter数据加密插件encryptions的使用

一个用于在Android和iOS上使用原生AES / Argon2算法的插件。由于目前无法为Flutter插件运行自动测试,因此在示例中提供了一些测试用例:

测试报告

测试平台:

  • iOS模拟器(iPhone 5SE)
  • Android(NX563J,Android 10)

开始使用

支持的算法:

  • AES(128位或256位),ECB或CBC模式,无填充或PKCS5填充。请注意,如果您选择NoPadding,则必须确保您要加密的数据块大小必须是16的倍数(即AES块大小)。
  • Argon2i, Argon2d, Argon2id

AES示例用法

Uint8List key256 = hex
    .decode("163928fb9615edf6005afc98d9fdbb3d830b3a286ebef64dd70be848f17bf9cc");
Uint8List iv = hex.decode("c1f6fd873e14050697c168b3e9da5db2");
Uint8List plain = hex.decode("01040000000300000002400000008b2e");

AES aes = AES.ofCBC(key256, iv, PaddingScheme.PKCS5Padding);
Uint8List encrypted = await aes.encrypt(plain);
Uint8List decrypted = await aes.decrypt(encrypted);

Argon2示例用法

Uint8List password = utf8.encode("password");
Uint8List salt = utf8.encode("helloworld");

Argon2 argon2 = Argon2(iterations: 16, hashLength: 64, memory: 256, parallelism: 2);
Uint8List hash = await argon2.argon2i(password, salt);

更多详情,请查看example/lib/test_case.dart

完整示例Demo

以下是一个完整的示例Demo,展示了如何在Flutter应用中使用encryptions插件。

import 'package:encryptions_example/test_case.dart';
import 'package:encryptions_example/test_case_config.dart';
import 'package:flutter/material.dart';
import 'dart:async';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Future<List<Report>> reports;

  [@override](/user/override)
  void initState() {
    super.initState();
    reports = test();
  }

  static const successStyle = TextStyle(fontSize: 16, color: Colors.green);
  static const errorStyle = TextStyle(fontSize: 16, color: Colors.red);
  static const padding = EdgeInsets.all(5.0);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Padding(
          padding: const EdgeInsets.only(top: 20.0, left: 5, right: 5),
          child: _renderReport(),
        ),
      ),
    );
  }

  Widget _renderTable(List<TableRow> rows) {
    return SingleChildScrollView(
      child: Table(
        border: new TableBorder.all(width: 1.0, color: Colors.grey),
        children: rows,
      ),
    );
  }

  TableRow _createRow(Report report) {
    return TableRow(key: ObjectKey(report.name), children: [
      TableCell(
        child: Padding(
          padding: padding,
          child: Text(
            "${report.name}",
            style: report.success ? successStyle : errorStyle,
          ),
        ),
      ),
    ]);
  }

  Widget _renderReport() {
    return FutureBuilder<List<Report>>(
      future: reports,
      builder: (_, snapshot) {
        switch (snapshot.connectionState) {
          case ConnectionState.done:
            if (snapshot.hasError) {
              print('got error! ${snapshot.error}');
              return Text("错误:${snapshot.error}");
            }
            print("完成! ${snapshot.data}");
            return _renderTable(snapshot.data.map((report) => _createRow(report)).toList());
          default:
            return Center(
              child: Text("正在测试..."),
            );
        }
      },
    );
  }

  Future<List<Report>> test() async {
    List<Report> reports = [];
    for (int i = 0; i < testCases.length; i++) {
      TestCase t = testCases[i];
      bool success;
      try {
        success = await t.execute();
      } catch (err, stack) {
        print(err);
        print(stack);
        success = false;
      }
      reports.add(Report(t.name, success));
    }
    return reports;
  }
}

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

1 回复

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


在Flutter中,encryptions 是一个用于数据加密的插件,支持多种加密算法,如AES、RSA、SHA等。使用这个插件,你可以在Flutter应用中轻松地加密和解密数据。以下是如何在Flutter中使用 encryptions 插件进行数据加密的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 encryptions 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  encryptions: ^2.0.0  # 请检查最新版本

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

2. 导入包

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

import 'package:encryptions/encryptions.dart';

3. 使用AES加密和解密

以下是一个使用AES加密和解密的示例:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: EncryptionDemo(),
    );
  }
}

class EncryptionDemo extends StatefulWidget {
  [@override](/user/override)
  _EncryptionDemoState createState() => _EncryptionDemoState();
}

class _EncryptionDemoState extends State<EncryptionDemo> {
  final aes = AES(Key.fromUtf8('your 32 length key..'), mode: AESMode.cbc);

  String encryptedText = '';
  String decryptedText = '';

  void encryptData() {
    final plainText = 'Hello, World!';
    final iv = IV.fromLength(16); // 初始化向量

    final encrypted = aes.encrypt(plainText, iv: iv);
    setState(() {
      encryptedText = encrypted.base64;
    });
  }

  void decryptData() {
    final iv = IV.fromLength(16); // 初始化向量

    final decrypted = aes.decrypt(Encrypted.fromBase64(encryptedText), iv: iv);
    setState(() {
      decryptedText = decrypted;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Encryption Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: encryptData,
              child: Text('Encrypt'),
            ),
            SizedBox(height: 20),
            Text('Encrypted: $encryptedText'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: decryptData,
              child: Text('Decrypt'),
            ),
            SizedBox(height: 20),
            Text('Decrypted: $decryptedText'),
          ],
        ),
      ),
    );
  }
}
回到顶部