Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在尝试改进浏览器中的Math.random()_Javascript_Security_Encryption_Cryptography - Fatal编程技术网

Javascript 正在尝试改进浏览器中的Math.random()

Javascript 正在尝试改进浏览器中的Math.random(),javascript,security,encryption,cryptography,Javascript,Security,Encryption,Cryptography,我想在这方面寻求一些专家的建议,我的密码学知识充其量只是粗略的 我想知道这是否是生成加密安全随机数的可行解决方案。更具体地说,我想知道使用Math.abs()或Math.sin()钳制数字是否会减少我从crypto.getRandomValues获得的数字的随机性,以至于它不再用于加密 if(window.crypto&&window.crypto.getRandomValues){ Math.random=()=>{ var阵列=新的UINT32阵列(1) window.crypto.ge

我想在这方面寻求一些专家的建议,我的密码学知识充其量只是粗略的

我想知道这是否是生成加密安全随机数的可行解决方案。更具体地说,我想知道使用Math.abs()或Math.sin()钳制数字是否会减少我从crypto.getRandomValues获得的数字的随机性,以至于它不再用于加密


if(window.crypto&&window.crypto.getRandomValues){
Math.random=()=>{
var阵列=新的UINT32阵列(1)
window.crypto.getRandomValues(数组)
返回Math.abs(Math.sin(数组[0]))
}
}

console.log(Math.random())
您试图通过“钳制”数字来实现什么?你的目标是一致的随机性吗?你不能通过取均匀随机变量的
sin
得到它
| sin(x)|
大于
0.707
的时间超过50%。您没有减少熵,但正在将分布更改为非均匀分布。以下是对JSFIDLE的更新,它演示了您的分布:。您没有失去任何随机性,但您将获得更多接近
1
的数字,而不是接近
0
@Paulpro这一数学的本机实现。random返回0到1之间的数字。只是试图保持一致性以避免破坏东西。所以你想要一致的随机性?getRandomValues随机统一返回所有可能的值,因此只需除以最大UInt32+1:
返回数组[0]/(2**32)
。谢谢,太好了。我没有进行基准测试,但我确信它也快了一些。