)window.crypto.getRandomValues的兼容性((Compatibility

2019-08-31 11:29发布

我需要生成密码安全伪随机数,在Javascript。 我了解window.crypto.getRandomValues API,这不正是我想要的。 不过,我也知道这是推出相对较晚(2011年左右)。

我可以安全地假定window.crypto.getRandomValues存在,还是会使用它引入的一些浏览器的兼容性问题? 是否有不支持任何重大的(广泛使用)的浏览器window.crypto.getRandomValues (包括移动和桌面浏览器),如果是这样,哪些我需要担心? 我会很高兴地得知,有足够的支持,我不再需要担心的后备方法 ,如果情况确实如此。

Answer 1:

我可以安全地假定window.crypto.getRandomValues存在

一如往常这取决于你的目标市场,并会随时间而改变。 caniuse.com列出了浏览器都支持它,并计算浏览器的市场份额。

这是一个总结:

  • IE 11:W /前缀
  • IE移动11:W /前缀

  • 火狐:21+

  • Firefox移动:21+

  • Safari浏览器:6.1

  • Safari浏览器手机:7.1

  • 铬:11+

  • 移动版Chrome浏览:23+
  • Android浏览器:4.4

  • 歌剧:15+

  • Opera移动:36+
  • Opera Mini的:无


Answer 2:

为了更完整,最新的观点,它可能会更好,只是检查caniuse.com

http://caniuse.com/#feat=getrandomvalues

截至2015年12月,所有现代浏览器,除了Opera Mini的,支持它:



Answer 3:

您好我刚刚有同样的问题,我知道它已经有一段时间,但仍可能帮助别人。 Opera是不支持window.crypto.getRandomValues唯一的一个,但它math.random()是相当安全的。

我做了什么来解决这个只是为了检查window.crypto是缴费,如果不检查是Opera浏览器,如果没有yust抛出一个错误,指出该浏览器无法产生一个安全的密码。

if(window.crypto && window.crypto.getRandomValues)
{
    (use window.crypto.getRandomValues)
}
else if(isOpera)
{
    (use Math.random)
}
else throw new Error("Your browser can not generate a secure Password, please change it to one that can (Google Chrome, IE, Firefox, Safari, Opera) or get the newest update.");

希望它可以帮助别人。



Answer 4:

const crypto = window.crypto ||
  window.msCrypto || {
    getRandomValues: array => {
      for (let i = 0, l = array.length; i < l; i++) {
        array[i] = Math.floor(Math.random() * 256);
      }
      return array;
    }
  };

  if (crypto.getRandomValues === undefined) {
    throw new Error("crypto is not supported on this browser");
  }


文章来源: Compatibility of window.crypto.getRandomValues()