10

我试图通过从 crypto.randomBytes() 读取来获得一个范围内的随机整数。

现在,我的问题是我不知道如何从该字节流中读取整数。我想生成一个范围只是“扔掉”不在范围内的整数的问题。

有任何想法吗?

4

3 回答 3

16

crypto.randomBytes您可以使用下面的代码获得一个 32 位整数。如果您需要多个字节,则可以请求更多字节crypto.randomBytes,然后用于substr单独选择和转换每个整数。

crypto.randomBytes(4, function(ex, buf) {
  var hex = buf.toString('hex');
  var myInt32 = parseInt(hex, 16);
});

话虽如此,您可能只想使用Math.floor(Math.random() * maxInteger)

于 2013-04-04T21:04:30.397 回答
4

在 NodeJS 的区间(即与 相同)中获取加密安全且均匀分布的值[0,1)Math.random()

const random = crypto.randomBytes(4).readUInt32LE() / 0x100000000;
console.log(random); //e.g. 0.9002735135145485

或在浏览器中

const random = window.crypto.getRandomValues(new Uint32Array(1))[0] / 0x100000000;
console.log(random);

于 2020-11-05T06:48:39.903 回答
3
const { randomInt } = await import('crypto');

const n = randomInt(1, 7);
console.log(`The dice rolled: ${n}`);

现在它在节点本身中实现 ​​https://nodejs.org/api/crypto.html#crypto_crypto_randomint_min_max_callback

于 2021-04-04T22:44:34.897 回答