我正在创建pastebin app,我希望粘贴的ID真正随机。 <{1}}在Linux上(托管在Linux机器上)使用噪声,因此它的输出是真正随机的。
目前我使用此代码生成ID:
/dev/random
Ruby的self.guid = Digest::SHA1.hexdigest(Time.new.to_s + (0...50).map{ ('a'..'z').to_a[rand(26)] }.join)
函数是否使用rand
,如果不是,我如何在Ruby中使用/dev/random
?感谢。
答案 0 :(得分:12)
难以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
答案 1 :(得分:3)
Nope,the documentation提到一个Mersenne twister,暗示一个软件解决方案,而不是随机设备。
但是,可能使用设备播种,具体取决于您使用的Ruby版本及其编译方式。 ruby-1.9.2-p0源代码的快速grep显示了对/dev/urandom
(可能是OpenSolaris)的一些引用,如果定义了USE_DEV_URANDOM
宏,看起来该设备将用于播种。 / p>
如果您确实需要这种随机性,最好直接从/dev/random
阅读。 This SO question应该让你开始。