Flutter随机数生成插件dart_randomx的使用
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/
中,然后构建包装器。
- 克隆 RandomX 项目,构建并将其库文件
-
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
更多关于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');
}