如何获得 [0,1] 范围内的加密强数字
How to get a cryptographically strong number in the range [0,1)?
我一直在尝试创建一个函数,该函数将通过Window.crypto.getRandomValues()
函数返回0(含)和1(不包括)之间的随机十进制数。目前,我的代码如下:
var rand = function(){
var ra = window.crypto.getRandomValues(new Uint32Array(1))[0];
function dec(n,m){
return (n>=0&&n<=1)?n:dec(n/m,m);
}
return dec(ra,8);
}
我的问题是这不是均匀分布的;它往往在0.2到0.7之间,很少低于.2和超过0.7。有没有更好的方法来使用 .getRandomValues()
方法来获取类似于 Math.random()
函数的数字?
我没有使用.random()
方法,因为我希望为我尝试执行的内容提供安全号码。
为什么不简化事情
function cryptoRandom() {
return window.crypto.getRandomValues(new Uint32Array(1))[0] / 0x100000000;
}
这是怎么回事?
- 假设
window.crypto.getRandomValues
会给我们真正的随机位 - 要求 32 位(无符号整数
i
) i
的min
鎓值为0x00000000
(或0
)i
的max
imum 值为0xFFFFFFFF
(或4294967295
)- 将这些点转换为您想要的范围;
(i - min) / (max + 1)
相关文章:
- Angularjs无法将单选按钮与嵌套范围内的模型绑定
- 如何使用D3生成特定范围内的随机颜色
- 将自定义css保持在角度范围内
- Angular JS-文本框未在独立范围内更新
- cookie不在网站范围内
- 获取给定JavaScript范围内的解析函数
- 如何在JavaScript中使用此函数对范围内的所有数字求和
- JavaScript-仅验证数值并且在范围内
- JS:从数组中查找特定范围内的最低/最高数字
- 试图检查表单中的值是否为一个设定范围内的数字
- 在十进制范围内搜索
- 基于日期范围的一组日期范围内的天数
- 如何在 Google 应用脚本中 sendEmail 函数的范围内的唯一非空白列中返回值
- 将数组传递给函数或确保它在范围内
- socket.io 客户端是否必须存在于全局范围内
- 查找某个日期范围内的可用天数
- 网站范围内jQuery/javascript选择器的最佳实践
- 如果指令包含在另一个指令中,我如何在隔离范围内添加双向数据绑定属性
- JS日期对象在某个范围内的百分比
- 如何获得 [0,1] 范围内的加密强数字