Con*_*ien 3 javascript random cryptography
我一直在尝试创建一个函数,它将通过函数返回0(包括)和1(不包括)之间的随机十进制数Window.crypto.getRandomValues().目前,我的代码如下:
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);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是这不是均匀分布的; 它倾向于在.2和.7之间,很少在.2和.7之间.有没有更好的方法来使用该.getRandomValues()方法来获得类似Math.random()函数的数字?
我没有使用该.random()方法,因为我希望为我正在尝试执行的操作设置安全数字.
为什么不简化事情
function cryptoRandom() {
return window.crypto.getRandomValues(new Uint32Array(1))[0] / 0x100000000;
}
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
window.crypto.getRandomValues将给我们真正的随机位i)min的鎓值i就是0x00000000(或0)max的imum值i就是0xFFFFFFFF(或4294967295)(i - min) / (max + 1)