Flutter加密解密插件sm_crypto的使用
Flutter加密解密插件sm_crypto的使用
sm_crypto
是一个支持SM2、SM3和SM4等国家密码算法的Dart库。本文将介绍如何在Flutter项目中使用该插件进行数据的加密和解密操作。
安装
首先,你需要在你的Flutter项目中添加 sm_crypto
依赖。可以通过以下命令来安装:
使用Dart
dat pub add sm_crypto
使用Flutter
flutter pub add sm_crypto
这将在你的项目的 pubspec.yaml
文件中自动添加如下依赖,并运行 dart pub get
:
dependencies:
sm_crypto: ^1.0.3
导入
在你的Dart代码中导入 sm_crypto
库:
import 'package:sm_crypto/sm_crypto.dart';
使用示例
SM3 加密
SM3是一种哈希算法,用于生成数据的摘要。下面是一个简单的例子:
void sm3Example() {
String data = 'Hello! SM-CRYPTO @Greenking19';
String sm3Encrypt = SM3.encryptString(data);
print('👇 SM3 Encrypt Data:');
print(sm3Encrypt);
}
SM4 加密与解密
SM4是一种分组加密算法,支持ECB和CBC两种模式。以下是使用SM4进行加密和解密的例子:
ECB模式
void sm4ExampleECB() {
String key = SM4.createHexKey(key: '1234567890987654');
String data = 'Hello! SM-CRYPTO @greenking19';
// 加密
String ebcEncryptData = SM4.encrypt(data: data, key: key);
print('🔒 EBC EncryptptData:\n $ebcEncryptData');
// 解密
String ebcDecryptData = SM4.decrypt(data: ebcEncryptData, key: key);
print('🔑 EBC DecryptData:\n $ebcDecryptData');
}
CBC模式
void sm4ExampleCBC() {
String key = SM4.createHexKey(key: '1234567890987654');
String iv = SM4.createHexKey(key: '1234567890987654'); // 初始化向量
String data = 'Hello! SM-CRYPTO @greenking19';
// 加密
String cbcEncryptData = SM4.encrypt(
data: data,
key: key,
mode: SM4CryptoMode.CBC,
iv: iv,
);
print('🔒 CBC EncryptptData:\n $cbcEncryptData');
// 解密
String cbcDecryptData = SM4.decrypt(
data: cbcEncryptData,
key: key,
mode: SM4CryptoMode.CBC,
iv: iv,
);
print('🔑 CBC DecryptData:\n $cbcDecryptData');
}
主函数调用示例
void main() {
sm3Example();
sm4ExampleECB();
sm4ExampleCBC();
}
更多关于Flutter加密解密插件sm_crypto的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter加密解密插件sm_crypto的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用sm_crypto
插件进行加密和解密的代码示例。sm_crypto
是一个流行的Flutter插件,用于处理各种加密和解密操作,包括对称加密(如AES)和非对称加密(如RSA)。
首先,确保你已经在pubspec.yaml
文件中添加了sm_crypto
依赖:
dependencies:
flutter:
sdk: flutter
sm_crypto: ^x.y.z # 替换为最新版本号
然后运行flutter pub get
来获取依赖。
接下来,以下是一个简单的示例代码,展示如何使用sm_crypto
进行AES加密和解密:
import 'package:flutter/material.dart';
import 'package:sm_crypto/sm_crypto.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String originalText = "Hello, Flutter!";
String encryptedText = "";
String decryptedText = "";
@override
void initState() {
super.initState();
_encryptText();
}
void _encryptText() async {
// 生成一个随机的AES密钥和IV(初始化向量)
final aesKey = AesKey.fromSecureRandom(32); // 256位密钥
final aesIV = AesIV.fromSecureRandom(16); // 128位IV
// 创建AES加密实例
final aesEncrypter = AesEncrypter(aesKey);
final aesEncryption = aesEncrypter.encrypt(originalText, iv: aesIV);
// 将加密结果转换为Base64字符串以便于显示
setState(() {
encryptedText = aesEncryption.base64;
});
// 解密以验证加密结果
final decrypted = aesEncrypter.decrypt64(aesEncryption.base64, iv: aesIV);
setState(() {
decryptedText = decrypted;
});
// 打印结果到控制台
print("Original Text: $originalText");
print("Encrypted Text (Base64): $encryptedText");
print("Decrypted Text: $decryptedText");
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter AES Encryption/Decryption Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Original Text:', style: TextStyle(fontWeight: FontWeight.bold)),
Text(originalText),
SizedBox(height: 16),
Text('Encrypted Text (Base64):', style: TextStyle(fontWeight: FontWeight.bold)),
Text(encryptedText),
SizedBox(height: 16),
Text('Decrypted Text:', style: TextStyle(fontWeight: FontWeight.bold)),
Text(decryptedText),
],
),
),
),
);
}
}
在这个示例中:
- 我们首先生成了一个随机的AES密钥和IV(初始化向量)。
- 使用
AesEncrypter
类创建一个加密实例,并使用encrypt
方法对原始文本进行加密。 - 将加密结果转换为Base64字符串以便于显示。
- 使用
decrypt64
方法对加密的Base64字符串进行解密,以验证加密结果。 - 使用
setState
方法更新UI,显示原始文本、加密文本和解密文本。
请注意,实际项目中应妥善管理密钥和IV,不要将它们硬编码在代码中,特别是在客户端应用程序中。通常,密钥管理涉及到服务器端的安全存储和分发。