модуль SecureRandom
Интерфейс генератора случайных чисел.
Эта библиотека — интерфейс к генераторам случайных чисел, пригодным для генерации сессионных ключей в HTTP-куки и т. п.
Вы можете использовать эту библиотеку в своём приложении, подключив её:
require 'securerandom'
Она поддерживает следующие генераторы случайных чисел:
-
openssl
-
/dev/urandom
-
Win32
SecureRandom расширяется модулем Random::Formatter, который определяет следующие методы:
-
alphanumeric
-
base64
-
choose
-
hex
-
rand
-
random_bytes
-
random_number
-
urlsafe_base64
-
uuid
Эти методы могут использоваться как методы класса SecureRandom, например, SecureRandom.hex.
Если генератор случайных чисел недоступен, поднимается исключение NotImplementedError.
Публичные методы класса
# File lib/securerandom.rb, line 42 def bytes(n) return gen_random(n) end
Приватные методы класса
# File lib/securerandom.rb, line 48
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 # File lib/securerandom.rb, line 63
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
Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.