модуль SecureRandom
Интерфейс генератора псевдослучайных чисел.
Эта библиотека — интерфейс к генераторам псевдослучайных чисел, подходящих для генерации ключей сеансов в HTTP-куки и т. п.
Вы можете использовать эту библиотеку в своём приложении, потребовав её:
require 'securerandom'
Она поддерживает следующие генераторы псевдослучайных чисел:
-
openssl
-
/dev/urandom
-
Win32
Примеры
Генерировать случайные шестнадцатеричные строки:
require 'securerandom' SecureRandom.hex(10) #=> "52750b30ffbc7de3b362" SecureRandom.hex(10) #=> "92b15d6c8dc4beb5f559" SecureRandom.hex(13) #=> "39b290146bea6ce975c37cfc23"
Генерировать случайные строки base64:
SecureRandom.base64(10) #=> "EcmTPZwWRAozdA==" SecureRandom.base64(10) #=> "KO1nIU+p9DKxGg==" SecureRandom.base64(12) #=> "7kJSM/MzBJI+75j8"
Генерировать случайные двоичные строки:
SecureRandom.random_bytes(10) #=> "\016\t{\370g\310pbr\301"
SecureRandom.random_bytes(10) #=> "\323U\030TO\234\357\020\a\337"
Генерировать случайные строчные alphanumeric строки:
SecureRandom.alphanumeric(10) #=> "S8baxMJnPl" SecureRandom.alphanumeric(10) #=> "aOxAg8BAJe"
Генерировать UUID:
SecureRandom.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594" SecureRandom.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab"
Методы публичного класса
# File lib/securerandom.rb, line 54 def bytes(n) return gen_random(n) end
# File lib/securerandom.rb, line 58
def gen_random(n)
ret = Random.urandom(1)
if ret.nil?
begin
require 'openssl'
rescue NoMethodError
raise NotImplementedError, "No random device"
else
@rng_chooser.synchronize do
class << self
remove_method :gen_random
alias gen_random gen_random_openssl
end
end
return gen_random(n)
end
else
@rng_chooser.synchronize do
class << self
remove_method :gen_random
alias gen_random gen_random_urandom
end
end
return gen_random(n)
end
end Методы приватного класса
# File lib/securerandom.rb, line 87
def gen_random_openssl(n)
@pid = 0 unless defined?(@pid)
pid = $$
unless @pid == pid
now = Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond)
OpenSSL::Random.random_add([now, @pid, pid].join(""), 0.0)
seed = Random.urandom(16)
if (seed)
OpenSSL::Random.random_add(seed, 16)
end
@pid = pid
end
return OpenSSL::Random.random_bytes(n)
end Также алиас: gen_random
# File lib/securerandom.rb, line 102
def gen_random_urandom(n)
ret = Random.urandom(n)
unless ret
raise NotImplementedError, "No random device"
end
unless ret.length == n
raise NotImplementedError, "Unexpected partial read from random device: only #{ret.length} for #{n} bytes"
end
ret
end Также алиас: gen_random
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.