【问题标题】:Can cryptographically strong UUIDs be generated in Javascript?可以在 Javascript 中生成加密的强 UUID 吗?
【发布时间】:2014-01-19 03:59:25
【问题描述】:

当今的网络浏览器(Chrome、IE、Safari 和 Firefox)的现状以及它们创建加密强 UUID 的能力如何?在研究这个问题时,我一直无法找到任何确定的东西。我在 stackoverflow 和其他地方遇到了指向 Math.random 问题的信息,但我想知道这一切的当前状态是什么。

更新

正如 icktoofay 指出的那样,crypto.getRandomValues 是这样做的方法。不幸的是,跨浏览器的支持是有限的。有没有一种行之有效的方法来解决这个问题?是否有任何 javascript 库可以解决这个问题?

【问题讨论】:

  • 你所说的“加密强大的 UUID”是什么意思? UUID 不应该是加密的任何东西 - 它们应该是唯一的。
  • 我指的是随机数生成器的质量。是否有足够的熵,是不是加密等级。
  • 在 UUID 的上下文中,不需要随机性,只需要唯一性。两者不是同义词。

标签: javascript google-chrome guid uuid


【解决方案1】:

在拥有它的浏览器中,您可以使用crypto.getRandomValues 来获取加密安全的伪随机值。例如:

var array = new Uint8Array(16);
crypto.getRandomValues(array);

然后您可以将这些字节操作为有效的 UUID。

【讨论】:

  • 感谢您的链接。在对 crypto.getRandomValues 的支持有限的情况下,还有其他方法可以获得更强的随机性吗?我会更新问题。
  • @user1843640: crypto.getRandomValues 是您拥有的最佳选择,但如果没有,您可能需要查看 how SJCL does it。
【解决方案2】:

虽然这不能直接回答原始问题,但它可能会帮助寻找库以帮助创建 UUID 的人。对于我目前的需求,我决定使用node-uuid 库。从功能列表中:

  • 生成 RFC4122 版本 1 或版本 4 UUID
  • 支持平台上的加密强随机 # 生成

查看源代码似乎是通过使用 @icktoofay 建议的 crypto.getRandomValues 来实现的。

【讨论】:

    【解决方案3】:

    简短的回答,不! 长答案,http://www.matasano.com/articles/javascript-cryptography/

    相信我,我对这个问题研究了一段时间。加密是实验性的,因此对于大多数浏览器来说,它是否定的。然而,节点可能会更好,因为它直接与操作系统相关联。不过你需要研究一下!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 2011-10-17
      • 2023-03-23
      • 2013-01-11
      • 2011-08-17
      • 2011-01-17
      相关资源
      最近更新 更多