Flutter数据加密与安全插件trustdart的使用

发布于 1周前 作者 wuwangju 来自 Flutter

Flutter数据加密与安全插件trustdart的使用

trustdart 是一个可以与 Trust Wallet Core 库交互的 Dart 库,主要用于区块链相关的本地操作,如钱包管理、地址生成和交易签名等。本文将介绍如何安装和使用 trustdart 插件,并提供一个完整的示例 Demo。

安装

在使用 trustdart 之前,需要先设置 GitHub 的个人访问令牌(Personal Access Token),并配置环境变量:

  1. 创建 GitHub 访问令牌

    • 参考 GitHub 文档 创建一个个人访问令牌。
    • 仅需选择 read:package 权限。
  2. 设置环境变量

    • 设置以下两个环境变量:
      • TRUST_DART_GITHUB_USER:用于生成访问令牌的 GitHub 用户名。
      • TRUST_DART_GITHUB_TOKEN:刚刚生成的 GitHub 访问令牌。
  3. 添加依赖

    • 在项目的 pubspec.yaml 文件中添加 trustdart 依赖:
      dependencies:
        trustdart: ^latest_version
      
  4. 获取最新版本

    • 你可以从 Pub.dev 获取最新的 trustdart 版本。

功能概述

本地操作

trustdart 主要支持以下本地操作:

  • 钱包管理

    • 创建一个新的多币种钱包。
    • 导入一个多币种钱包。
  • 地址派生

    • 生成默认的地址。
    • 使用自定义派生路径生成地址(高级用户)。
  • 交易签名

    • 对发送的交易进行签名。

需要节点访问的操作

  • 查询区块链上的交易历史。
  • 将新创建的交易推送到区块链。

注意:trustdart 仅支持本地操作,查询区块链或推送交易需要自己编写代码实现。

示例 Demo

下面是一个完整的 Flutter 示例应用,展示了如何使用 trustdart 进行钱包管理和地址生成。

示例代码

import 'package:flutter/material.dart';
import 'package:trustdart_example/operations.dart'; // 假设 operations.dart 包含具体的操作逻辑

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 异步初始化平台状态
  Future<void> initPlatformState() async {
    await runOperations(); // 执行具体的操作

    if (!mounted) return;
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('TrustDart Example App'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              Container(
                child: TextButton(
                  style: TextButton.styleFrom(
                    foregroundColor: Colors.black, 
                    padding: const EdgeInsets.all(16.0),
                    backgroundColor: Colors.red,
                    textStyle: const TextStyle(fontSize: 20),
                  ),
                  onPressed: () async {
                    // 创建一个新的多币种钱包
                    await createNewWallet();
                  },
                  child: const Text('Create a new multi-coin wallet'),
                ),
              ),
              Container(
                child: TextButton(
                  style: TextButton.styleFrom(
                    foregroundColor: Colors.black, 
                    padding: const EdgeInsets.all(16.0),
                    backgroundColor: Colors.yellow,
                    textStyle: const TextStyle(fontSize: 20),
                  ),
                  onPressed: () async {
                    // 生成默认地址
                    await generateDefaultAddress();
                  },
                  child: const Text('Generate the default addresses.'),
                ),
              ),
              Container(
                child: TextButton(
                  style: TextButton.styleFrom(
                    foregroundColor: Colors.black, 
                    padding: const EdgeInsets.all(16.0),
                    backgroundColor: Colors.green,
                    textStyle: const TextStyle(fontSize: 20),
                  ),
                  onPressed: () async {
                    // 签名交易
                    await signTransaction();
                  },
                  child: const Text('Sign transactions for sending.'),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

具体操作函数

假设 operations.dart 文件包含以下操作函数:

import 'package:trustdart/trustdart.dart';

// 创建一个新的多币种钱包
Future<void> createNewWallet() async {
  var mnemonic = await TrustDart.generateMnemonic();
  var wallet = await TrustDart.createWallet(mnemonic);
  print("Mnemonic: $mnemonic");
  print("Wallet Address: ${wallet.address}");
}

// 生成默认地址
Future<void> generateDefaultAddress() async {
  var mnemonic = "your mnemonic phrase here";
  var wallet = await TrustDart.createWallet(mnemonic);
  var address = await TrustDart.getAddress(wallet, "ethereum");
  print("Generated Ethereum Address: $address");
}

// 签名交易
Future<void> signTransaction() async {
  var mnemonic = "your mnemonic phrase here";
  var wallet = await TrustDart.createWallet(mnemonic);
  var transaction = "your raw transaction data here";
  var signature = await TrustDart.signTransaction(wallet, transaction);
  print("Signed Transaction: $signature");
}

更多关于Flutter数据加密与安全插件trustdart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据加密与安全插件trustdart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用trustdart插件来进行数据加密与安全的代码示例。trustdart是一个提供多种加密和安全功能的Flutter插件,适用于保护敏感数据。

首先,确保在你的pubspec.yaml文件中添加trustdart依赖:

dependencies:
  flutter:
    sdk: flutter
  trustdart: ^x.y.z  # 请替换为最新的版本号

然后,运行flutter pub get来安装依赖。

接下来,让我们编写一些示例代码来展示如何使用trustdart进行数据加密和解密。

示例代码

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:trustdart/trustdart.dart';
  1. 创建加密和解密函数
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('TrustDart 示例'),
        ),
        body: Center(
          child: TrustDartExample(),
        ),
      ),
    );
  }
}

class TrustDartExample extends StatefulWidget {
  @override
  _TrustDartExampleState createState() => _TrustDartExampleState();
}

class _TrustDartExampleState extends State<TrustDartExample> {
  String? encryptedData;
  String? decryptedData;

  void encryptData(String plainText, String key) async {
    try {
      final cipherText = await TrustDart.aesEncrypt(plainText, key);
      setState(() {
        encryptedData = cipherText;
      });
    } catch (e) {
      print("加密失败: $e");
    }
  }

  void decryptData(String cipherText, String key) async {
    try {
      final plainText = await TrustDart.aesDecrypt(cipherText, key);
      setState(() {
        decryptedData = plainText;
      });
    } catch (e) {
      print("解密失败: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('原始数据:'),
        TextField(
          decoration: InputDecoration(labelText: '输入明文'),
          onEditingComplete: () {
            final plainText = textController.text;
            final key = 'your-secret-key-12345';  // 请使用安全的密钥管理方式
            encryptData(plainText, key);
            decryptData(encryptedData ?? '', key);
          },
        ),
        SizedBox(height: 20),
        Text('加密数据:'),
        Text(encryptedData ?? ''),
        SizedBox(height: 20),
        Text('解密数据:'),
        Text(decryptedData ?? ''),
      ],
    );
  }
}

注意

  • 上述代码仅为示例,并未包含完整的输入控制器(TextEditingController)实现。你需要自己管理输入框的状态。
  • key应当是一个安全的密钥,建议使用安全的密钥管理方式(如密钥管理服务KMS)来生成和管理密钥。
  • 实际应用中,请确保处理异常和错误情况,例如密钥不正确或加密/解密失败的情况。

完整的输入控制器实现

为了使上述代码完整工作,你需要添加一个TextEditingController来管理输入框的状态:

import 'package:flutter/material.dart';
import 'package:trustdart/trustdart.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('TrustDart 示例'),
        ),
        body: Center(
          child: TrustDartExample(),
        ),
      ),
    );
  }
}

class TrustDartExample extends StatefulWidget {
  @override
  _TrustDartExampleState createState() => _TrustDartExampleState();
}

class _TrustDartExampleState extends State<TrustDartExample> {
  final _textController = TextEditingController();
  String? encryptedData;
  String? decryptedData;

  void encryptData() async {
    final plainText = _textController.text;
    final key = 'your-secret-key-12345';  // 请使用安全的密钥管理方式
    try {
      final cipherText = await TrustDart.aesEncrypt(plainText, key);
      setState(() {
        encryptedData = cipherText;
        decryptData();
      });
    } catch (e) {
      print("加密失败: $e");
    }
  }

  void decryptData() async {
    final key = 'your-secret-key-12345';  // 请使用安全的密钥管理方式
    try {
      final plainText = await TrustDart.aesDecrypt(encryptedData ?? '', key);
      setState(() {
        decryptedData = plainText;
      });
    } catch (e) {
      print("解密失败: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('原始数据:'),
        TextField(
          controller: _textController,
          decoration: InputDecoration(labelText: '输入明文'),
        ),
        SizedBox(height: 20),
        ElevatedButton(
          onPressed: encryptData,
          child: Text('加密'),
        ),
        SizedBox(height: 20),
        Text('加密数据:'),
        Text(encryptedData ?? ''),
        SizedBox(height: 20),
        Text('解密数据:'),
        Text(decryptedData ?? ''),
      ],
    );
  }

  @override
  void dispose() {
    _textController.dispose();
    super.dispose();
  }
}

这样,你就可以在Flutter应用中使用trustdart进行简单的AES加密和解密操作了。请确保在实际应用中采用安全的密钥管理和错误处理策略。

回到顶部