流星随机 - 如何知道发电机是强还是弱

时间:2015-10-29 17:42:58

标签: javascript meteor random

http://docs.meteor.com/#/full/random的流星文档说:

  

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

问:如果可以生成强大的随机生成器,我可以在脚本中获取信息。

我想展示一个类似的框:“抱歉,您无法在您的环境中生成强大的randoms”,而不是创建较弱的。“

感谢您的一些反馈 汤姆

3 个答案:

答案 0 :(得分:2)

查看代码:  https://github.com/meteor/meteor/blob/devel/packages/random/random.js

我看到Random对象的'type'属性,指示正在使用哪种随机数生成器。

提取的值:

  • NODE_CRYPTO - 在浏览器中使用Node.js RNG - 大概
  • BROWSER_CRYPTO - 使用Web浏览器的随机数生成器 - 假定为字符串
  • ALEA - JavaScript中的“不安全”随机数生成器实现

因此,您可以通过查询其中一个字符串的“Random.type”值来检查正在使用的随机数生成器。

答案 1 :(得分:0)

If the user is using IE10 or lower, Meteor falls back to Alea.

用于检查是否必须使用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,也可以执行以下操作:

if(Random.type === 'ALEA'){
    // weak
}

答案 2 :(得分:0)

好的,感谢您的指导协助,但是您的帖子没有回答我想要的问题。

@Oskar:你的long(typeof ...)测试应该可以工作,但这不是测试来自meteor的Random包而是测试浏览器界面。

不幸的是.type对象无法使用Random属性。

要使用您必须使用的Random对象:

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

干杯 汤姆

更新:如果你使用流星版本<1.2,我上面的回答是正确的。自1.2以来有一个更新,现在属性.type可用。

您仍然可以使用上述测试,但现在也可以:

if (Random.type === "NODE_CRYPTO") {
  // server side strong node crypto
}
else
if (Random.type === "BROWSER_CRYPTO") {
  // client side strong browser crypto
}
else {
  // weak crypto by alea()
}