如何获得特定范围内的随机 BigInt (Dart)
How do I get a random BigInt in a specific range (Dart)
如果之前有人问过这个问题,我很抱歉,但我找不到任何对我有帮助的解决方案。
基本上,我有一个巨大的数字 n
,其中 n
是一个 4000 位数。显然,它不适合 Dart 中原始类型 int
允许的 64 位。
我需要找到一个随机数 g
使得 2 ≤ g ≤ (n - 1)
。有什么方法可以生成这样的随机数吗?
我目前的解决方案:
void _generatePrivateKey() {
const numbers = '0123456789';
final halfOfNLength = N.toString().length ~/ 2; // Where `N` is `BigInt`
final length = _rand.nextInt(halfOfNLength) + halfOfNLength;
final buffer = StringBuffer();
for (var _ = 0; _ < length; _++) {
buffer.write(numbers[_rand.nextInt(numbers.length)]);
}
_privateKey = BigInt.parse(buffer.toString());
}
我知道这不是一个好的解决方案,但我现在只有这些了
package:pointycastle
contains a utility file with a decodeBigInt
function that converts a list of bytes into a BigInt
.
以下是使用它生成 4000 位值的方法:
import 'dart:math';
import 'dart:typed_data';
BigInt randomBigInt() {
const size = 4000;
final random = Random.secure();
final builder = BytesBuilder();
for (var i = 0; i < size; ++i) {
builder.addByte(random.nextInt(256));
}
final bytes = builder.toBytes();
return decodeBigInt(bytes);
}
或者,decodeBigIntWithSign
可用于强制执行否定或肯定结果。
如果之前有人问过这个问题,我很抱歉,但我找不到任何对我有帮助的解决方案。
基本上,我有一个巨大的数字 n
,其中 n
是一个 4000 位数。显然,它不适合 Dart 中原始类型 int
允许的 64 位。
我需要找到一个随机数 g
使得 2 ≤ g ≤ (n - 1)
。有什么方法可以生成这样的随机数吗?
我目前的解决方案:
void _generatePrivateKey() {
const numbers = '0123456789';
final halfOfNLength = N.toString().length ~/ 2; // Where `N` is `BigInt`
final length = _rand.nextInt(halfOfNLength) + halfOfNLength;
final buffer = StringBuffer();
for (var _ = 0; _ < length; _++) {
buffer.write(numbers[_rand.nextInt(numbers.length)]);
}
_privateKey = BigInt.parse(buffer.toString());
}
我知道这不是一个好的解决方案,但我现在只有这些了
package:pointycastle
contains a utility file with a decodeBigInt
function that converts a list of bytes into a BigInt
.
以下是使用它生成 4000 位值的方法:
import 'dart:math';
import 'dart:typed_data';
BigInt randomBigInt() {
const size = 4000;
final random = Random.secure();
final builder = BytesBuilder();
for (var i = 0; i < size; ++i) {
builder.addByte(random.nextInt(256));
}
final bytes = builder.toBytes();
return decodeBigInt(bytes);
}
或者,decodeBigIntWithSign
可用于强制执行否定或肯定结果。