Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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 流星随机-如何知道是强还是弱发生器_Javascript_Meteor_Random - Fatal编程技术网

Javascript 流星随机-如何知道是强还是弱发生器

Javascript 流星随机-如何知道是强还是弱发生器,javascript,meteor,random,Javascript,Meteor,Random,meteor的文档中说: 。。。在可能的情况下,它使用加密的strong伪随机数生成器,但在加密的强随机性不可用时,会退回到较弱的随机数生成器(在较旧的浏览器或服务器上,没有足够的熵来为加密强大的生成器播种) Q:如果生成强随机生成器可用或不可用,我可以在脚本中的某个地方获取信息吗 我想展示一个框,比如:“对不起,您不能在您的环境中生成强随机数”,而不是创建较弱的随机数 谢谢你的反馈 Tom查看代码: 我看到随机对象的一个“type”属性,它指示正在使用哪种类型的随机数生成器 提取的值: N

meteor的文档中说:

。。。在可能的情况下,它使用加密的strong伪随机数生成器,但在加密的强随机性不可用时,会退回到较弱的随机数生成器(在较旧的浏览器或服务器上,没有足够的熵来为加密强大的生成器播种)

Q:如果生成强随机生成器可用或不可用,我可以在脚本中的某个地方获取信息吗

我想展示一个框,比如:“对不起,您不能在您的环境中生成强随机数”,而不是创建较弱的随机数

谢谢你的反馈 Tom查看代码:

我看到随机对象的一个“type”属性,它指示正在使用哪种类型的随机数生成器

提取的值:

  • NODE_CRYPTO-使用NODE.js RNG-可能从未在浏览器中使用过
  • 浏览器加密-使用Web浏览器的随机数生成器-假定为字符串
  • ALEA—JavaScript中的“不安全”随机数生成器实现
因此,您可以通过查询其中一个字符串的“random.type”值来检查正在使用的随机数生成器。

用于检查他们是否必须使用Alea的代码如下:

if (typeof window !== "undefined" && window.crypto && window.crypto.getRandomValues) {
    // We don't have to use Alea (strong)
} else {
    // We have to use Alea (weak)
}
if(Random.type === 'ALEA'){
    // weak
}
如果,您可以使用相同的
,也可以只执行以下操作:

if (typeof window !== "undefined" && window.crypto && window.crypto.getRandomValues) {
    // We don't have to use Alea (strong)
} else {
    // We have to use Alea (weak)
}
if(Random.type === 'ALEA'){
    // weak
}

好的,谢谢你的指导帮助,但是没有你的帖子回答了这个问题,因为我想这样做

@奥斯卡:你的长(typeof…)测试应该可以,但这不是测试meteor的随机软件包,而是测试浏览器界面

不幸的是,
.type
属性在
Random
对象中不可用

要使用随机对象,必须使用:

if (Meteor.isClient) {
    if (Random && Random.alea) {
         // only weak
    } else {
         // strong via browser crypto
    } 
}
干杯 汤姆



更新:我上面的回答只有在使用meteor版本时才正确,该版本显示了浏览器支持的
crypto.getRandomValues()
Btw::在服务器上应该是相同的。如果不是alea,则使用节点加密。