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位值。