Node.js - 如何使用 crypto.randomBytes 生成特定范围内的随机数

标签 node.js math random cryptography

如何使用 crypto.randomBytes 生成特定范围内的随机数?

我希望能够生成这样的随机数:

console.log(random(55, 956)); // where 55 is minimum and 956 is maximum

我只能在 random 函数中使用 crypto.randomBytes 来生成此范围的随机数。

我知道如何将生成的字节从 randomBytes 转换为十六进制或十进制,但我不知道如何从数学上从随机字节中获取特定范围内的随机数。

最佳答案

要生成一定范围内的随机数,可以使用以下等式

Math.random() * (high - low) + low

但您想使用 crypto.randomBytes 而不是 Math.random() 此函数返回一个包含随机生成字节的缓冲区。反过来,您需要将此函数的结果从字节转换为十进制。这可以使用 biguint-format 包来完成。要安装此软件包,只需使用以下命令:

npm install biguint-format --save

现在您需要将crypto.randomBytes的结果转换为十进制,您可以这样做:

var x= crypto.randomBytes(1);
return format(x, 'dec');

现在您可以创建如下所示的随机函数:

var crypto = require('crypto'),
    format = require('biguint-format');

function randomC (qty) {
    var x= crypto.randomBytes(qty);
    return format(x, 'dec');
}
function random (low, high) {
    return randomC(4)/Math.pow(2,4*8-1) * (high - low) + low;
}
console.log(random(50,1000));

关于Node.js - 如何使用 crypto.randomBytes 生成特定范围内的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33609404/

相关文章:

java - Math.random 没有给我一个我正在寻找的范围内的变量?

javascript - 使用绑定(bind)时找不到javascript

optimization - 在 Mathematica 中优化内循环计算

Node.js 应用程序语法错误 : Unexpected reserved word 'class'

math - 具有类似 Pearltree 界面的 Web 应用程序

c++ - 查找点是否形成正方形的有效方法。计算 C++

javascript - 在刷新时向多个元素添加相同的随机类?

mysql - 如何在 MySQL 中随机选择 HEX 颜色但避免特定颜色范围?

sql - 使用 sql/sequelize 通过 userId 获取喜欢的帖子并获取帖子的喜欢计数

html - 如何从 mongodb 获取数据以放入选项?