【问题标题】:Does Ruby on Linux use /dev/random?Linux 上的 Ruby 是否使用 /dev/random?
【发布时间】:2011-07-04 14:20:24
【问题描述】:

我正在创建一个pastebin app,并且我希望粘贴的 ID 是真正随机的。 Linux 上的/dev/random(托管在 Linux 机器上)使用噪声,因此它的输出是真正随机的。

目前我使用此代码生成 ID:

self.guid = Digest::SHA1.hexdigest(Time.new.to_s + (0...50).map{ ('a'..'z').to_a[rand(26)] }.join)

Ruby 的rand 函数是否使用/dev/random,如果不是,我如何在Ruby 中使用/dev/random?谢谢。

【问题讨论】:

    标签: ruby linux random


    【解决方案1】:

    几乎没有documented SecureRandom(ruby 1.9.2 中的标准库)使用 OpenSSL(比 urandom 快),如果不可用,它使用 urandom,最后检查 win32 的随机是否 可用的。如果没有,您将收到错误消息。 它有很好的功能:

    require 'securerandom'
    puts SecureRandom.urlsafe_base64(50)
    #=> thgv48AT_gGcYD3xx-lCqRWjoAFqN3pm2ZBKOZPZP2BC0aSMD5rXg1EaPzKLbJMMt4Y
    puts SecureRandom.uuid
    #=> 2670f82a-0aee-41a8-93c5-2d08e2c608db 
    

    (uuid: RFC 4122)

    【讨论】:

    【解决方案2】:

    不,the documentation 提到了 Mersenne twister,暗示了一种软件解决方案,而不是随机设备。

    但是,它可能使用设备进行播种,具体取决于您使用的 Ruby 版本及其编译方式。对 ruby​​-1.9.2-p0 源代码的快速 grep 显示了对 /dev/urandom(可能用于 OpenSolaris)的一些引用,如果定义了 USE_DEV_URANDOM 宏,则该设备将用于播种。

    如果你真的需要那种程度的随机性,你最好直接阅读/dev/randomThis SO question 应该可以帮助您入门。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 2011-06-16
      相关资源
      最近更新 更多