如何获得[0,1]范围内的加密强数?

问题描述 投票:3回答: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);
}

我的问题是这不是均匀分布的;它倾向于在.2和.7之间,很少在.2和.7之间。有没有更好的方法来使用.getRandomValues()方法来获得类似于Math.random()函数的数字?

我没有使用.random()方法,因为我希望为我正在尝试执行的操作设置安全数字。

javascript random cryptography
1个回答
5
投票

为什么不简化事情

function cryptoRandom() {
    return window.crypto.getRandomValues(new Uint32Array(1))[0] / 0x100000000;
}

这里发生了什么?

  • 假设qazxsw poi将给我们真正的随机位
  • 要求32位(无符号整数window.crypto.getRandomValues
  • iminium值是i(或0x00000000
  • 0maximum值是i(或0xFFFFFFFF
  • 将这些点转换为您想要的范围; 4294967295
© www.soinside.com 2019 - 2024. All rights reserved.