Flutter加密解密插件cipherlib的使用
以下是关于Flutter加密解密插件cipherlib
使用的详细说明,包括完整的示例代码。
cipherlib
实现Dart语言中的加密和解密算法。
依赖项
此包仅使用一个依赖项:
特性
加密算法 | 公共类和方法 | 源 |
---|---|---|
AES | AES , |
NIST.FIPS.197 |
XOR | XOR , xor , xorStream |
Wikipedia |
ChaCha20 | ChaCha20 , chacha20 , chacha20Stream |
RFC-8439 |
ChaCha20/Poly1305 | ChaCha20Poly1305 , chacha20poly1305 |
RFC-8439 |
XChaCha20 | XChaCha20 , xchacha20 , xchacha20Stream |
libsodium |
XChaCha20/Poly1305 | XChaCha20Poly1305 , xchacha20poly1305 |
libsodium |
Salsa20 | Salsa20 , salsa20 , salsa20Stream |
Snuffle-2005 |
Salsa20/Poly1305 | Salsa20Poly1305 , salsa20poly1305 |
Snuffle-2005 |
XSalsa20 | XSalsa20 , xsalsa20 , xsalsa20Stream |
libsodium |
XSalsa20/Poly1305 | XSalsa20Poly1305 , xsalsa20poly1305 |
libsodium |
可用模式
ECB
: 电子码块CBC
: 密码块链接CTR
: 计数器GCM
: Galois/计数器模式CFB
: 密码反馈OFB
: 输出反馈IGE
: 无限乱码扩展PCBC
: 传播密码块链接XTS
: XEX(XOR-Encrypt-XOR)可调整块密码与密文窃取
开始使用
以下导入语句将使你能够访问此包中的所有算法:
import 'package:cipherlib/cipherlib.dart';
详情请查看API参考文档。
使用示例
示例可以在example
文件夹中找到。
import 'package:cipherlib/cipherlib.dart';
import 'package:hashlib/hashlib.dart';
import 'package:hashlib/codecs.dart';
void main() {
print('----- AES -----');
{
var plain = 'A not very secret message';
var key = randomBytes(32);
var iv = randomBytes(16);
print(' Text: $plain');
print(' Key: ${toHex(key)}');
print(' Nonce: ${toHex(iv)}');
// 不同的模式
print(' ECB: ${toHex(AES(key).ecb().encryptString(plain))}');
print(' CBC: ${toHex(AES(key).cbc(iv).encryptString(plain))}');
print(' CTR: ${toHex(AES(key).ctr(iv).encryptString(plain))}');
print(' GCM: ${toHex(AES(key).gcm(iv).encryptString(plain))}');
print(' CFB: ${toHex(AES(key).cfb(iv).encryptString(plain))}');
print(' OFB: ${toHex(AES(key).ofb(iv).encryptString(plain))}');
print(' XTS: ${toHex(AES(key).xts(iv).encryptString(plain))}');
print(' IGE: ${toHex(AES(key).ige(iv).encryptString(plain))}');
print(' PCBC: ${toHex(AES(key).pcbc(iv).encryptString(plain))}');
}
print('');
print('----- XChaCha20 -----');
{
var text = "Hide me!";
var key = randomBytes(32);
var nonce = randomBytes(24);
// 加密和签名
var cipher = xchacha20poly1305(
toUtf8(text),
key,
nonce: nonce,
);
// 验证并解密
var plain = xchacha20poly1305(
cipher.data,
key,
nonce: nonce,
mac: cipher.tag.bytes,
);
print(' Text: $text');
print(' Key: ${toHex(key)}');
print(' Nonce: ${toHex(nonce)}');
print('Cipher: ${toHex(cipher.data)}');
print(' Tag: ${cipher.tag.hex()}');
print(' Plain: ${fromUtf8(plain.data)}');
}
print('');
}
更多关于Flutter加密解密插件cipherlib的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter加密解密插件cipherlib的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用cipherlib
插件进行加密和解密的示例代码。cipherlib
是一个用于加密和解密的Flutter插件,支持多种加密算法。为了演示,我们将使用AES对称加密算法。
首先,确保你已经在pubspec.yaml
文件中添加了cipherlib
依赖:
dependencies:
flutter:
sdk: flutter
cipherlib: ^x.y.z # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,我们编写一个示例代码来展示如何使用cipherlib
进行AES加密和解密。
import 'package:flutter/material.dart';
import 'package:cipherlib/cipherlib.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String plainText = "Hello, Flutter!";
String encryptedText = "";
String decryptedText = "";
@override
void initState() {
super.initState();
_encryptText();
}
void _encryptText() async {
// 密钥和初始化向量(IV),AES要求密钥长度为16, 24, 或 32字节,IV长度为16字节
final key = Uint8List.fromList('0123456789abcdef'.codeUnits); // 16字节
final iv = Uint8List.fromList('abcdef0123456789'.codeUnits.sublist(0, 16)); // 16字节
// 创建Cipher实例
final cipher = Cipher();
// 执行加密
final encrypted = await cipher.aesEncrypt(plainText, key, iv);
setState(() {
encryptedText = encrypted;
// 解密以验证结果
_decryptText(key, iv, encrypted);
});
}
void _decryptText(Uint8List key, Uint8List iv, String encrypted) async {
final cipher = Cipher();
final decrypted = await cipher.aesDecrypt(encrypted, key, iv);
setState(() {
decryptedText = decrypted;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Cipherlib Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Plain Text: $plainText'),
SizedBox(height: 16),
Text('Encrypted Text: $encryptedText'),
SizedBox(height: 16),
Text('Decrypted Text: $decryptedText'),
],
),
),
),
);
}
}
解释
- 依赖安装:首先,在
pubspec.yaml
中添加cipherlib
依赖,并运行flutter pub get
。 - 密钥和IV:AES加密需要一个密钥和一个初始化向量(IV)。在这个示例中,我们使用16字节的密钥和IV。
- Cipher实例:创建一个
Cipher
实例。 - 加密:使用
cipher.aesEncrypt
方法进行加密,将明文转换为密文。 - 解密:使用
cipher.aesDecrypt
方法进行解密,将密文转换回明文。 - UI展示:在Flutter的UI中展示明文、密文和解密后的明文。
这个示例展示了如何使用cipherlib
插件在Flutter应用中进行AES加密和解密。请根据你的需求调整密钥、IV和加密模式。