代码之家  ›  专栏  ›  技术社区  ›  Paweł Hajdan

Linux/POSIX中Windows的rand_s的最佳替代品是什么?

  •  3
  • Paweł Hajdan  · 技术社区  · 17 年前

    问题不在于随机性本身(我们有rand),而在于加密安全的PRNG。Linux或理想的POSIX上可以使用什么?NSS有什么有用的东西吗?

    澄清 :我知道/dev/random,但它可能会耗尽熵池。我不确定/dev/uradom是否保证加密安全。

    3 回复  |  直到 15 年前
        1
  •  5
  •   Armin Ronacher    17 年前

    使用 /dev/random (需要用户输入,如鼠标移动)或 /dev/urandom . 后者有一个熵池,不需要任何用户输入,除非池为空。

    您可以这样从池中读取:

    char buf[100];
    FILE *fp;
    if (fp = fopen("/dev/urandom", "r")) {
        fread(&buf, sizeof(char), 100, fp);
        fclose(fp);
    }
    

    或者类似的。

        2
  •  5
  •   tzot    17 年前

    从…起 Wikipedia (斜体):

    与/dev/random相对应的是/dev/urandom(“unlocked”random source),它重用内部池以产生更多的伪随机位。这意味着调用不会阻塞,但输出的熵可能小于从/dev/random读取的相应熵。这个 意图 是作为一个 . 这可能用于不太安全的应用程序。

        3
  •  3
  •   Greg Hewgill    17 年前

    这个 /dev/random 该设备旨在成为加密安全位的来源。