Flutter安全工具插件mtrust_sec_kit的使用

Flutter安全工具插件mtrust_sec_kit的使用

描述

Documentation Status

pub package pub points style: very good analysis

概述

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组件,请包含以下提供者和门户:

  1. 主题提供者:用LdThemeProvider包装您的应用:
LdThemeProvider(
  child: MaterialApp(
    home: MyHomePage(),
  ),
)
  1. 门户:将您的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

1 回复

更多关于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.xmlInfo.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'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
回到顶部