Flutter加密功能插件flutter_rust_encrypt的使用

Flutter加密功能插件flutter_rust_encrypt的使用

该插件是用于在Flutter中方便使用的dart_rust_encrypt插件的包装器。

安装

要使用此插件,在你的pubspec.yaml文件中添加flutter_rust_encrypt作为依赖项:

dependencies:
  flutter_rust_encrypt: 

然后运行以下命令来获取依赖项:

flutter pub get

使用

在你的Dart文件中导入该包:

import 'package:flutter_rust_encrypt/flutter_rust_encrypt.dart';

初始化和使用

final FlutterRustEncrypt flutterRustEncrypt = FlutterRustEncrypt();
final result = await flutterRustEncrypt.sha3_256(testInput);
print("Rust结果: $result");

示例

完整的示例可以在示例文件夹中找到。此外,你还可以看到Dart实现(使用pointycastle包)和Rust实现之间SHA3-256的速度差异。

添加或更新功能

由于这是一个对dart_rust_encrypt插件的封装,你可以通过更新dart_rust_encrypt插件并为每个平台构建所需的库来添加或更新功能。详细说明请参阅dart_rust_encrypt的文档。


以下是完整的示例代码,展示如何在Flutter项目中使用flutter_rust_encrypt插件进行加密操作。

import 'dart:async';
import 'dart:convert';
import 'dart:math';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_rust_encrypt/flutter_rust_encrypt.dart';
import 'package:flutter_rust_encrypt_example/constants.dart';
import 'package:pointycastle/digests/sha3.dart';

// 测试输入数据
final Uint8List testInput = Uint8List.fromList(utf8.encode(testText));

void main() async {
  debugPrint('哈希测试输入大小: ${testText.length / pow(1024, 2)} MB');
  runApp(const MaterialApp(home: ComparePage()));
}

class ComparePage extends StatefulWidget {
  const ComparePage({super.key});

  [@override](/user/override)
  ComparePageState createState() => ComparePageState();
}

class ComparePageState extends State<ComparePage> {
  Stopwatch rustStopwatch = Stopwatch();
  late Timer rustTimer;

  Stopwatch dartStopwatch = Stopwatch();
  late Timer dartTimer;

  bool timersStarted = false; // 跟踪计时器是否已启动

  [@override](/user/override)
  Widget build(BuildContext context) {
    final Color rustColor = rustStopwatch.isRunning ? Colors.red : Colors.green;
    final Color dartColor = dartStopwatch.isRunning ? Colors.red : Colors.green;

    return Scaffold(
      appBar: AppBar(
        title: const Text('比较页面'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              '测试 ${testText.length / pow(1024, 2)}MB 文本',
              style: const TextStyle(
                fontSize: 25,
              ),
              textAlign: TextAlign.center,
            ),
            const SizedBox(height: 75),
            Text(
              'Rust 哈希所用时间:\n ${rustStopwatch.elapsed.inSeconds} 秒/毫秒: ${rustStopwatch.elapsed.inMilliseconds}',
              style: TextStyle(
                fontSize: 25,
                color: rustColor,
              ),
              textAlign: TextAlign.center,
            ),
            const SizedBox(height: 50),
            Text(
              'Dart 哈希所用时间:\n ${dartStopwatch.elapsed.inSeconds} 秒/毫秒: ${dartStopwatch.elapsed.inMilliseconds}',
              style: TextStyle(fontSize: 25, color: dartColor),
              textAlign: TextAlign.center,
            ),
            const SizedBox(height: 50),
            ElevatedButton(
              onPressed: !timersStarted ? startTimers : null,
              child: const Text('开始'),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> startTimers() async {
    dartStopwatch.reset();
    rustStopwatch.reset();

    setState(() {
      timersStarted = true;
    });

    // Dart 相关操作
    dartStopwatch.start();
    dartTimer = Timer.periodic(const Duration(seconds: 1), (Timer timer) {
      setState(() {});
    });

    // 在另一个隔离中执行以避免阻塞UI线程
    await compute(dartHash, null).then((_) {
      dartStopwatch.stop();
      dartTimer.cancel();
      setState(() {});
    });

    // Rust 相关操作
    rustStopwatch.start();
    rustTimer = Timer.periodic(const Duration(seconds: 1), (Timer timer) {
      setState(() {});
    });
    // Rust 不会阻塞UI线程
    await rustHash().then((_) {
      rustStopwatch.stop();
      rustTimer.cancel();
      setState(() {});
    });

    timersStarted = false;
  }

  static Future<void> dartHash(void _) async {
    final sha3digest = SHA3Digest(256)..reset();
    final result = sha3digest.process(testInput);
    debugPrint('Dart 结果: $result');
    debugPrint('Dart 哈希完成');
  }

  Future<void> rustHash() async {
    final rustSha = FlutterRustEncrypt();
    final result = await rustSha.sha3_256(testInput);
    debugPrint('Rust 结果: $result');
    debugPrint('Rust 哈希完成');
  }
}

更多关于Flutter加密功能插件flutter_rust_encrypt的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter加密功能插件flutter_rust_encrypt的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用Flutter加密功能插件flutter_rust_encrypt的代码案例。这个插件利用了Rust的高性能加密库来提供加密和解密功能。以下是一个简单的示例,展示了如何使用该插件进行加密和解密操作。

首先,你需要在你的pubspec.yaml文件中添加依赖:

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

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

接下来,在你的Flutter应用中,你可以按照以下方式使用flutter_rust_encrypt

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

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

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

class _MyAppState extends State<MyApp> {
  String encryptedText = '';
  String decryptedText = '';
  String plainText = 'Hello, Flutter!';
  String key = '1234567890123456';  // 16字节的密钥(AES-128)

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Rust Encrypt Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              Text('Plain Text: $plainText'),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () async {
                  // 加密
                  String result = await FlutterRustEncrypt.encryptAES(
                    plainText: plainText,
                    key: key,
                  );
                  setState(() {
                    encryptedText = result;
                  });
                },
                child: Text('Encrypt'),
              ),
              SizedBox(height: 16),
              Text('Encrypted Text: $encryptedText'),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () async {
                  // 解密
                  String result = await FlutterRustEncrypt.decryptAES(
                    encryptedText: encryptedText,
                    key: key,
                  );
                  setState(() {
                    decryptedText = result;
                  });
                },
                child: Text('Decrypt'),
              ),
              SizedBox(height: 16),
              Text('Decrypted Text: $decryptedText'),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含两个按钮,一个用于加密文本,另一个用于解密文本。我们使用FlutterRustEncrypt.encryptAES方法进行加密,使用FlutterRustEncrypt.decryptAES方法进行解密。

注意:

  • key应该是一个16字节的字符串,这对应于AES-128加密。如果你需要使用AES-256,则密钥应为32字节。
  • 确保密钥的安全存储和传输,因为密钥泄露将导致加密数据的安全性受到威胁。

这个示例演示了如何使用flutter_rust_encrypt插件进行基本的加密和解密操作。你可以根据需要进行更复杂的加密配置和处理。

回到顶部