我试图通过读取crypto.randomBytes()来获取范围内的随机整数。
现在,我的问题是我不知道如何从该字节流中读取整数。我想,生成一个范围只是“扔掉”不在范围内的整数。
有什么想法吗?
答案 0 :(得分:15)
您可以使用以下代码从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)
答案 1 :(得分:1)
在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);
答案 2 :(得分:0)
const { randomInt } = await import('crypto');
const n = randomInt(1, 7);
console.log(`The dice rolled: ${n}`);
现在在node本身实现了 https://nodejs.org/api/crypto.html#crypto_crypto_randomint_min_max_callback