Javascript Math.random是否可以替换为生成具有相同参数的数字的CSPRNG?

Javascript Math.random是否可以替换为生成具有相同参数的数字的CSPRNG?,javascript,random,cryptography,Javascript,Random,Cryptography,我想用加密安全的随机数生成器替换Math.random函数 生成器的输出必须从0(包含)到1(独占),才能与原始的Math.random保持一致,这样就可以将其放入任何项目中,而不会造成潜在的错误。这样的函数可以实现以下目的: Math.random=()=>(crypto | | msCrypto).getRandomValues(新UINT32数组(1))[0]/4294967296 资料来源: 说明:通过将uint32数组输入getRandomValues方法,我们生成了一个介于0和42

我想用加密安全的随机数生成器替换
Math.random
函数


生成器的输出必须从
0
(包含)到
1
(独占),才能与原始的
Math.random
保持一致,这样就可以将其放入任何项目中,而不会造成潜在的错误。

这样的函数可以实现以下目的:

Math.random=()=>(crypto | | msCrypto).getRandomValues(新UINT32数组(1))[0]/4294967296
资料来源:


说明:通过将
uint32数组
输入
getRandomValues
方法,我们生成了一个介于
0
4294967295
之间的加密安全随机数。通过将此输出除以
4294967296
,得到的数字将介于
0
(包含)和
1
(排除)之间,就像
Math.random

一样,我认为您不想从Math.pow(2,32)中减去1,除非您希望1包含在可能的输出范围内。@squemishosifrage fixed如果我不知道,请原谅,但是什么是
inclusive&(integerLimit-=1)做,为什么需要它?@MaartenBodewes我意识到它有点毫无意义,因为它违背了问题的目的(用CSPRNG重新创建
Math.random
),所以我把它扔掉了。感谢sorta指出这一点。事后看来,我明白了它的作用,但由于变量是在函数之外定义的,没有列为参数,所以我走错了方向。很高兴你把它修好了,如果只是为了清楚起见。