Flutter数据加密插件encrypto_flutter的使用
Flutter数据加密插件encrypto_flutter的使用
关于项目
End to End 加密(RSA e2ee)适用于多种语言(跨平台),并且特别为本地文件加密提供了值密码保护(DES 加密)!
目录
图标 | 项目 |
---|---|
📺 | 预览 |
🥳 | 即将推出 |
⚖️ | 许可 |
使用(Flutter/Dart)
实现
pubspec.yaml
encrypto_flutter: lastest
RSA
RSA 初始化
Encrypto encrypto = Encrypto(Encrypto.RSA); // 或者 Encrypto(Encrypto.RSA, bitLength: 1024) 或者 Encrypto(Encrypto.RSA, pw: 'foofoo78')
// 这将生成用于e2ee的公钥和私钥,或者初始化DES加密
RSA 加密
String val = "alo";
String base64encrypted = encrypto.encrypt(val, publicKey);
// 作为第二个参数传递公钥是RSA加密的必要条件
RSA 解密
String decrypted = encrypto.decrypt(base64encrypted);
// 打印解密后的消息,即 "alo"
RSA 其他方法
序号 | 方法 | 信息 |
---|---|---|
1 | Encrypto.dart / getPublicKey() | 返回生成的ZotPublicKey |
2 | Encrypto.dart / desterilizePublicKey() | 静态方法,将ZotPublicKey字符串转换为ZotPublicKey |
3 | Encrypto.dart / sterilizePublicKey() | 返回一个可以发送给其他人的ZotPublicKey字符串 |
4 | Encrypto.dart / getPrivateKeyString() 和 getPublicKeyString() | 返回私钥/公钥的指数和模数的纯文本 |
5 | Encrypto.dart / encrypt(String value, ZotPublicKey publicKey) | 用于使用RSA加密字符串 |
6 | Encrypto.dart / public String decrypt(String value) | 用于使用密码或ZotPrivateKey解密字符串(无需传递ZotPrivateKey或密码作为参数) |
7 | ZotPublicKey.dart / public String sterilizePublicKey() 和 public String encrypt(byte[] val) | 同上表第3和第5项 |
8 | ZotPrivateKey.dart / public String decrypt(byte[] decode) | 同上表第7项 |
DES
注意:DES可能在版本1.*中抛出错误
DES 初始化
Encrypto encrypto = new Encrypto(Encrypto.DES, "the moon is scary sometimes");
// 必须将密码作为第二个参数传递以进行DES加密
// 建议传递密码的哈希值而不是明文
DES 加密
String base64DESencrypted = encrypto.encrypt("alo");
// 第二个参数不传递或传递null
DES 解密
String decrypted = encrypto.decrypt(base64DESencrypted);
// 您将获得原始文本
即将推出
支持的语言 | 状态 |
---|---|
Rust | 待定 |
JavaScript | 待定 |
预览
[]
许可
点击 这里 查看许可
示例代码
example/lib/main.dart
import 'dart:developer';
import 'package:encrypto_flutter/encrypto_flutter.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String encryptedString = '', decyptedString = '';
bool _isEditingText = true;
late List<TextEditingController> controllers;
late Encrypto encrypto;
[@override](/user/override)
void initState() {
controllers = [];
for (int i = 0; i < 3; i++) {
controllers.add(TextEditingController());
}
encrypto = Encrypto(Encrypto.RSA, bitLength: 128);
log(encrypto.sterilizePublicKey()); // 在测试时输入此内容到第一个字段
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Column(
children: [
_editTitleTextField(0), // 输入ZotPublicKey sterilized字符串
_editTitleTextField(1), // 输入要加密的消息
_editTitleTextField(2), // 输入要解密的加密消息
ElevatedButton(
onPressed: () {
// 使用自动生成的公钥加密消息
//
// 您还可以通过以下方式生成要发送给客户端的base64公钥字符串:
// var publicKeyToBeSent = encrypto.sterilizePublicKey();
// print(publicKeyToBeSent); // 打印 eyJwZSI6OTIyMzM3MjAzNjg1NDc3NTgwNywib24iOjkyMjMzNzIwMzY4NTQ3NzU4MDd9
//
// 为了反序列化客户的公钥,您可以使用:
// 现在您可以像这样使用此公钥进行加密:
setState(() {
if (controllers[2].text.isNotEmpty) {
decyptedString = encrypto.decrypt(controllers[2].text);
encryptedString = '';
}
if (controllers[1].text.isNotEmpty) {
if (controllers[0].text.isNotEmpty) {
encryptedString = encrypto.encrypt(controllers[1].text,
publicKey: Encrypto.desterilizePublicKey(
controllers[0].text));
} else {
encryptedString = encrypto.encrypt(controllers[1].text,
publicKey: encrypto.getPublicKey());
}
}
});
},
child: const Text("Encrypt and Decrypt")),
ElevatedButton(
child: Text(encryptedString.isNotEmpty && decyptedString.isNotEmpty
? 'Decrypted: $decyptedString\nEncrypted: $encryptedString'
: encryptedString.isEmpty
? 'Decrypted: $decyptedString'
: 'Encrypted: $encryptedString'),
onPressed: () {
Clipboard.setData(ClipboardData(
text: encryptedString.isNotEmpty && decyptedString.isNotEmpty
? 'Decrypted: $decyptedString Encrypted: $encryptedString'
: encryptedString.isEmpty
? decyptedString
: encryptedString));
},
),
],
),
),
);
}
Widget _editTitleTextField(int i) {
if (_isEditingText) {
return Center(
child: TextField(
onSubmitted: (newValue) {
setState(() {
encryptedString = newValue;
_isEditingText = false;
});
},
autofocus: true,
controller: controllers[i],
),
);
}
return InkWell(
onTap: () {
setState(() {
_isEditingText = true;
});
},
child: Text(
encryptedString,
style: const TextStyle(
color: Colors.black,
fontSize: 18.0,
),
));
}
}
更多关于Flutter数据加密插件encrypto_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter数据加密插件encrypto_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用encrypto_flutter
插件进行数据加密和解密的示例代码。encrypto_flutter
是一个用于加密和解密数据的Flutter插件,支持多种加密算法,如AES、RSA等。
首先,你需要在pubspec.yaml
文件中添加encrypto_flutter
依赖:
dependencies:
flutter:
sdk: flutter
encrypto_flutter: ^x.y.z # 请将x.y.z替换为最新版本号
然后运行flutter pub get
来获取依赖。
接下来是一个完整的示例,展示如何使用AES算法进行数据加密和解密:
import 'package:flutter/material.dart';
import 'package:encrypto_flutter/encrypto_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Encrypto Flutter Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: EncryptoExample(),
),
),
);
}
}
class EncryptoExample extends StatefulWidget {
@override
_EncryptoExampleState createState() => _EncryptoExampleState();
}
class _EncryptoExampleState extends State<EncryptoExample> {
final TextEditingController _keyController = TextEditingController();
final TextEditingController _plainTextController = TextEditingController();
String _encryptedText = '';
String _decryptedText = '';
void _encrypt() async {
String key = _keyController.text;
String plainText = _plainTextController.text;
if (key.isEmpty || plainText.isEmpty) {
_encryptedText = 'Key and plain text are required.';
return;
}
try {
final encrypto = Encrypto();
String encrypted = await encrypto.aesEncrypt(plainText, key);
setState(() {
_encryptedText = encrypted;
_decryptedText = '';
});
} catch (e) {
_encryptedText = 'Error during encryption: $e';
}
}
void _decrypt() async {
String key = _keyController.text;
String encryptedText = _encryptedText;
if (key.isEmpty || encryptedText.isEmpty) {
_decryptedText = 'Key and encrypted text are required.';
return;
}
try {
final encrypto = Encrypto();
String decrypted = await encrypto.aesDecrypt(encryptedText, key);
setState(() {
_decryptedText = decrypted;
});
} catch (e) {
_decryptedText = 'Error during decryption: $e';
}
}
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
TextField(
controller: _keyController,
decoration: InputDecoration(labelText: 'Encryption Key'),
),
SizedBox(height: 16),
TextField(
controller: _plainTextController,
decoration: InputDecoration(labelText: 'Plain Text'),
maxLines: 5,
),
SizedBox(height: 16),
ElevatedButton(
onPressed: _encrypt,
child: Text('Encrypt'),
),
SizedBox(height: 16),
Text('Encrypted Text:'),
Text(_encryptedText, style: TextStyle(color: Colors.grey)),
SizedBox(height: 16),
ElevatedButton(
onPressed: _decrypt,
child: Text('Decrypt'),
),
SizedBox(height: 16),
Text('Decrypted Text:'),
Text(_decryptedText, style: TextStyle(color: Colors.grey)),
],
);
}
}
解释
- 依赖添加:在
pubspec.yaml
文件中添加encrypto_flutter
依赖。 - 界面构建:使用
MaterialApp
和Scaffold
构建一个简单的用户界面,包含输入密钥和明文、加密按钮、显示加密结果、解密按钮和显示解密结果的区域。 - 加密和解密逻辑:
- 使用
Encrypto
类的aesEncrypt
方法进行加密。 - 使用
Encrypto
类的aesDecrypt
方法进行解密。 - 捕获并处理可能的异常。
- 使用
注意事项
- 确保你使用的密钥长度符合AES算法的要求(例如,16、24或32字节)。
- 加密和解密使用的是相同的密钥。
- 加密后的文本通常是不可读的二进制数据,但这里为了简单起见,直接将其显示为字符串。在实际应用中,你可能需要进行适当的编码(如Base64)以便存储和传输。
希望这个示例能帮你更好地理解如何在Flutter项目中使用encrypto_flutter
插件进行数据加密和解密。