Flutter安全工具插件mtrust_sec_kit的使用
Flutter安全工具插件mtrust_sec_kit的使用

概述
SEC-Kit简化了将M-Trust SEC-Reader集成到您的Flutter应用程序的过程,提供了安全且高效的通信功能。
前提条件
- 在系统上安装了Flutter SDK。
- 具备基本的Flutter开发知识。
- 访问M-Trust SEC-Reader硬件,或者在没有硬件的情况下使用
mtrust_virtual_strategy
进行开发。
安装
通过以下命令将mtrust_sec_kit
添加到您的Flutter项目:
flutter pub add mtrust_sec_kit
或手动将其添加到您的pubspec.yaml
文件中:
dependencies:
mtrust_sec_kit: ^1.0.0
SEC-Kit可以与不同的URP连接策略一起工作。默认情况下,SEC Reader使用BLE(蓝牙低功耗)。请在您的pubspec.yaml
文件中包含BLE连接策略:
dependencies:
mtrust_sec_kit: ^1.0.0
# 添加BLE连接策略
mtrust_urp_ble_strategy: ^8.0.1
请根据您的平台配置BLE的具体步骤,请参阅这里。
使用
字体
SEC-Kit使用Lato字体和自定义图标。要包含这些资源,请更新您的pubspec.yaml
文件:
flutter:
fonts:
- family: Lato
fonts:
- asset: packages/liquid_flutter/fonts/Lato-Regular.ttf
weight: 500
- asset: packages/liquid_flutter/fonts/Lato-Bold.ttf
weight: 800
- family: LiquidIcons
fonts:
- asset: packages/liquid_flutter/fonts/LiquidIcons.ttf
多语言支持
为了支持多种语言,需要将必要的本地化委托添加到您的应用程序中。有关国际化全面指导,请参阅Flutter文档。
return const MaterialApp(
title: '您的应用名称',
localizationsDelegates: [
...LiquidLocalizations.delegate,
...UrpUiLocalizations.delegate,
...SecLocalizations.localizationsDelegates,
],
home: MyHomePage(),
);
添加UI依赖
要利用SEC-Kit的UI组件,请包含以下提供者和门户:
- 主题提供者:用
LdThemeProvider
包装您的应用:
LdThemeProvider(
child: MaterialApp(
home: MyHomePage(),
),
)
- 门户:将您的
Scaffold
封装在LdPortal
中:
LdPortal(
child: Scaffold(
...
),
)
使用SEC表单
要显示SEC表单,请使用SecSheet
小部件。它需要一个连接策略、有效负载以及验证过程的回调:
SecSheet(
strategy: _connectionStrategy,
payload: // 有效负载,
onVerificationDone: () {},
onVerificationFailed: () {},
builder: (context, openSheet) {
// 调用openSheet以打开SEC表单
},
),
配置选项
- 连接策略:虽然BLE是默认设置,但SEC-Kit支持各种连接策略。确保根据需要包含并配置适当的策略包。
故障排除
- BLE连接问题:确保设备的蓝牙已启用,并且M-Trust SEC-Reader已开启且在范围内。
- 字体渲染问题:确保字体资源正确引用在您的
pubspec.yaml
文件中,并且文件存在于指定路径中。
贡献
我们欢迎贡献!请将仓库fork并提交包含更改的pull请求。确保您的代码符合我们的编码标准并包括适当的测试。
许可证
该项目基于Apache 2.0许可证。详情请参见LICENSE文件。
示例代码
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:mtrust_sec_kit/mtrust_sec_kit.dart';
import 'package:mtrust_urp_virtual_strategy/mtrust_urp_virtual_strategy.dart';
import 'package:liquid_flutter/liquid_flutter.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(LdThemeProvider(
child: LdThemedAppBuilder(appBuilder: (context, theme) {
return MaterialApp(
theme: theme,
localizationsDelegates: const [
DefaultMaterialLocalizations.delegate,
DefaultWidgetsLocalizations.delegate,
LiquidLocalizations.delegate,
SecLocalizations.delegate,
UrpUiLocalizations.delegate,
],
home: const MainApp(),
);
}),
));
}
extension PrependLength on Uint8List {
Uint8List prependLength() {
return Uint8List.fromList(_int16ToBytes(length) + this);
}
Uint8List _int16ToBytes(int value) {
if (value < -32768 || value > 32767) {
throw ArgumentError('Value must be between -32768 and 32767.');
}
final bytes = Uint8List(2);
// 将两个字节存储为小端顺序
bytes[0] = (value >> 8) & 0xFF; // 上位字节
bytes[1] = value & 0xFF; // 下位字节
return bytes;
}
}
class MainApp extends StatefulWidget {
const MainApp({super.key});
[@override](/user/override)
State<MainApp> createState() => _MainAppState();
}
class _MainAppState extends State<MainApp> {
final _virtualStrategy = UrpVirtualStrategy((UrpRequest request) async {
final payload = UrpSecCommandWrapper.fromBuffer(request.payload);
final result = switch (payload.deviceCommand.command) {
(UrpSecCommand.urpSecPrime) => UrpResponse(),
(UrpSecCommand.urpSecStartMeasurement) => UrpResponse(
payload: UrpSecMeasurement(
nonce: 12,
readerId: "foo",
signature: "bar",
).writeToBuffer(),
),
_ => switch (payload.coreCommand.command) {
(UrpCommand.urpOff) => UrpResponse(),
_ => throw Exception("Command not supported"),
},
};
await Future.delayed(const Duration(seconds: 2));
return result;
});
//late final _bleStrategy = UrpBleStrategy();
[@override](/user/override)
void initState() {
_virtualStrategy.createVirtualReader(FoundDevice(
name: "SEC-000123",
type: UrpDeviceType.urpSec,
address: "00:00:00:00:00:00",
));
super.initState();
}
// 如果验证成功将被调用。
void onVerificationDone(/*Measurement content*/) async {
// 获取身份验证令牌
}
// 如果验证失败将被调用。
void onVerificationFailed() {}
[@override](/user/override)
Widget build(BuildContext context) {
return LdPortal(
child: Scaffold(
appBar: LdAppBar(
context: context,
title: const Text(
"SEC Kit Example",
),
),
body: SafeArea(
child: Column(mainAxisAlignment: MainAxisAlignment.end, children: [
Container(
width: double.infinity,
),
SecSheet(
strategy: _virtualStrategy,
payload: "",
onVerificationDone: (measurement) {},
onVerificationFailed: () {},
builder: (context, openSheet) {
return LdButton(
onPressed: openSheet,
child: const Text("Open SEC Sheet"),
);
},
),
ldSpacerL,
]),
),
),
);
}
}
更多关于Flutter安全工具插件mtrust_sec_kit的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter安全工具插件mtrust_sec_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
mtrust_sec_kit
是一个 Flutter 插件,旨在帮助开发者提高应用程序的安全性。它可能提供了一系列功能,如加密、安全存储、防篡改、反调试等。由于 mtrust_sec_kit
是一个第三方插件,具体的使用方法和功能可能会有所不同,以下是一些通用的步骤和示例,帮助你开始使用这个插件。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 mtrust_sec_kit
插件的依赖。
dependencies:
flutter:
sdk: flutter
mtrust_sec_kit: ^版本号 # 请替换为最新的版本号
然后运行 flutter pub get
来获取依赖。
2. 导入插件
在你的 Dart 文件中导入 mtrust_sec_kit
插件。
import 'package:mtrust_sec_kit/mtrust_sec_kit.dart';
3. 初始化插件
在使用插件之前,你可能需要初始化它。通常,这可以在 main
函数或 initState
中完成。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await MtrustSecKit.initialize();
runApp(MyApp());
}
4. 使用插件的功能
mtrust_sec_kit
可能提供了多种功能,以下是一些常见的用例:
4.1 加密和解密
String encryptedData = await MtrustSecKit.encrypt("Sensitive Data");
print("Encrypted Data: $encryptedData");
String decryptedData = await MtrustSecKit.decrypt(encryptedData);
print("Decrypted Data: $decryptedData");
4.2 安全存储
await MtrustSecKit.saveSecureData("key", "Sensitive Value");
String value = await MtrustSecKit.getSecureData("key");
print("Stored Value: $value");
await MtrustSecKit.deleteSecureData("key");
4.3 防篡改和反调试
bool isTampered = await MtrustSecKit.isTampered();
if (isTampered) {
print("App has been tampered with!");
}
bool isDebugging = await MtrustSecKit.isDebugging();
if (isDebugging) {
print("App is being debugged!");
}
5. 处理错误
在使用插件时,可能会遇到错误或异常。确保你正确处理这些情况。
try {
String encryptedData = await MtrustSecKit.encrypt("Sensitive Data");
print("Encrypted Data: $encryptedData");
} catch (e) {
print("Error encrypting data: $e");
}
6. 调试和测试
在使用过程中,确保你充分测试插件的功能,特别是在不同的设备和操作系统上。
7. 参考文档
由于 mtrust_sec_kit
是一个第三方插件,建议你查阅其官方文档或 GitHub 仓库,以获取更详细的使用说明和 API 参考。
8. 注意事项
- 权限: 某些功能可能需要特定的权限,确保你在
AndroidManifest.xml
或Info.plist
中添加了所需的权限。 - 兼容性: 确保插件与你的 Flutter 版本和平台版本兼容。
- 安全性: 虽然插件提供了安全功能,但开发者仍需遵循最佳实践,如使用 HTTPS、避免硬编码敏感信息等。
9. 示例代码
以下是一个完整的示例,展示了如何使用 mtrust_sec_kit
进行加密、解密和安全存储。
import 'package:flutter/material.dart';
import 'package:mtrust_sec_kit/mtrust_sec_kit.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await MtrustSecKit.initialize();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('mtrust_sec_kit Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
String encryptedData = await MtrustSecKit.encrypt("Sensitive Data");
print("Encrypted Data: $encryptedData");
String decryptedData = await MtrustSecKit.decrypt(encryptedData);
print("Decrypted Data: $decryptedData");
},
child: Text('Encrypt & Decrypt'),
),
ElevatedButton(
onPressed: () async {
await MtrustSecKit.saveSecureData("key", "Sensitive Value");
String value = await MtrustSecKit.getSecureData("key");
print("Stored Value: $value");
await MtrustSecKit.deleteSecureData("key");
},
child: Text('Secure Storage'),
),
],
),
),
),
);
}
}