Flutter随机数生成插件dart_randomx的使用

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

Flutter随机数生成插件dart_randomx的使用

Dart RandomX 插件是一个用于在 Dart 和 Flutter 中生成随机数的库。它封装了 RandomX 工作量证明(Proof-of-Work, PoW)算法,并支持多种平台的构建。

使用

以下是一个简单的使用示例:

import 'dart:typed_data';
import 'package:dart_randomx/dart_randomx.dart';

Future<void> main() async {
  // 加载 RandomX 库
  await RandomX.loadLib();

  // 创建一个 RandomX 实例
  var randomX = RandomX();

  // 打印 RandomX 实例信息
  print(randomX);

  // 初始化 RandomX,传入一个密钥
  var key = Uint8List.fromList([97, 98, 99, 100, 101, 102, 0]); // 密钥为 "abcdef\0"
  randomX.init(key);

  // 准备要哈希的数据
  var data = Uint8List.fromList([65, 66, 67, 68, 69, 0]); // 数据为 "ABCDEF\0"

  // 计算哈希值
  var hash = randomX.hash(data);
  print(hash); // 输出哈希结果

  // 销毁 RandomX 实例以释放资源
  randomX.destroy();
}

运行结果

运行上述代码后,您将看到类似如下的输出:

Instance of 'RandomX'
[160, 223, 112, 104, 190, 132, 184, 114, 102, 121, 200, 240, 114, 201, 120, 190]

RandomX 全内存模式

RandomX 算法有两种模式:

  • 慢速模式:占用内存较少但速度较慢。
  • 快速模式:速度快(约快 10 倍),但需要 2GB 或更多的内存。

要启用快速模式,只需在初始化时传入 fullMemory: true 参数:

Future<void> main() async {
  await RandomX.loadLib();
  
  var randomX = RandomX();
  randomX.init(key, fullMemory: true); // 启用快速模式
}

库文件

此包已经包含了 RandomX 包装器库的内置二进制文件。这些文件位于子目录 wrapper_randomx_library/ 中:

  • libwrapper_randomx.dll (Windows x64)
  • libwrapper_randomx.so (Linux x64)
  • libwrapper_randomx-x64.dylib (macOS x64)
  • libwrapper_randomx-arm64.dylib (macOS ARM64)

项目构建

要构建库文件,请参考脚本 build-ffi-lib.sh

  • randomx:RandomX PoW 算法。
  • wrapper_randomx:Dart FFI 对 randomx 的包装。

目录 wrapper_randomx_library 包含了 FFI 包装器的源代码和构建脚本:

  • build-librandomx.sh

    • 克隆 RandomX 项目,构建并将其库文件 librandomx.a 放置到 wrapper_randomx_library/ 中,然后构建包装器。
  • build-wrapper.sh

    • 构建包装器,链接 librandomx.a

对于 Windows 支持,请查看文件 wrapper_randomx_library/build-all-mingw64.sh。您需要安装 MSYS2 和一些必要的软件包:

pacman -S --needed development
pacman -S --needed base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc
pacman -S --needed ninja

更多关于Flutter随机数生成插件dart_randomx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter随机数生成插件dart_randomx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


dart_randomx 是一个用于生成随机数的 Dart 插件,它基于 RandomX 算法,提供了高质量的随机数生成功能。RandomX 是一种基于密码学的随机数生成算法,适用于需要高安全性和高质量随机数的场景。

安装 dart_randomx

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

dependencies:
  dart_randomx: ^0.1.0

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

使用 dart_randomx

以下是一些基本的使用示例:

1. 生成随机数

import 'package:dart_randomx/dart_randomx.dart';

void main() {
  // 创建一个 RandomX 实例
  final randomX = RandomX();

  // 生成一个随机整数
  int randomInt = randomX.nextInt(100); // 生成 0 到 99 之间的随机整数
  print('Random Integer: $randomInt');

  // 生成一个随机双精度浮点数
  double randomDouble = randomX.nextDouble(); // 生成 0.0 到 1.0 之间的随机浮点数
  print('Random Double: $randomDouble');

  // 生成一个随机布尔值
  bool randomBool = randomX.nextBool(); // 生成 true 或 false
  print('Random Boolean: $randomBool');
}

2. 生成随机字节

import 'package:dart_randomx/dart_randomx.dart';

void main() {
  final randomX = RandomX();

  // 生成一个包含 16 个随机字节的列表
  List<int> randomBytes = randomX.nextBytes(16);
  print('Random Bytes: $randomBytes');
}

3. 生成随机字符串

import 'package:dart_randomx/dart_randomx.dart';

void main() {
  final randomX = RandomX();

  // 生成一个包含 10 个随机字符的字符串
  String randomString = randomX.nextString(10);
  print('Random String: $randomString');
}

高级用法

dart_randomx 还支持一些高级功能,例如设置种子、生成随机数序列等。

设置种子

import 'package:dart_randomx/dart_randomx.dart';

void main() {
  // 使用指定的种子创建 RandomX 实例
  final randomX = RandomX(seed: 12345);

  // 生成随机数
  int randomInt = randomX.nextInt(100);
  print('Random Integer with Seed: $randomInt');
}

生成随机数序列

import 'package:dart_randomx/dart_randomx.dart';

void main() {
  final randomX = RandomX();

  // 生成一个包含 5 个随机整数的列表
  List<int> randomInts = List.generate(5, (_) => randomX.nextInt(100));
  print('Random Integers: $randomInts');
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!