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'),
],
),
),
);
}
}