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

Javascript 如何获得[0,1]范围内的加密强数?,javascript,random,cryptography,Javascript,Random,Cryptography,我一直在尝试创建一个函数,该函数将通过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

我一直在尝试创建一个函数,该函数将通过
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);
}
var rand=function(){
var ra=window.crypto.getRandomValues(新的uint32数组(1))[0];
函数dec(n,m){

返回(n>=0&&n为什么不简化事情

function cryptoRandom() {
    return window.crypto.getRandomValues(new Uint32Array(1))[0] / 0x100000000;
}
这是怎么回事

  • 假设
    window.crypto.getRandomValues
    将为我们提供真正的随机位
  • 请求32位(无符号整数
    i
  • i
    min
    ium值为
    0x00000000
    (或
    0
  • i
    max
    imum值为
    0xffffff
    (或
    4294967295
  • 将这些点变换到所需的范围;
    (i-min)/(max+1)

    • 谢谢!0x100000000
是什么意思?我只写了一点代码,从来没有被正式教过。@ConorO'Brien这是
4294967296
的十六进制表示法,它很特别,因为它是
数学.pow(2,32)
,即一个32位整数可以拥有的不同值的数量再次感谢您所做的一切!@ConorO'Brien哦,为了帮助您更好地理解,
0x
一开始只是我们说“这是一个十六进制文字”,然后后面的每个数字都将位于
[0-9A-F]
,其中
A
表示
10
B
11
F
15
。最后,每列现在是
16
s,而不是
10
s,也就是说,十六进制的
10
在十二月是
16
。它对计算机非常有用,因为16是2的幂(和
16*16-1
FF=255
,即一个字节的最大值)这就是计算机的工作原理,所以你基本上是在用速记写计算机有用的二进制。这并没有使用双尾数提供的全部53位。我更喜欢生成两个
UInt32
值并将它们组合,或者生成一个64位值。