Spec-Zone.ru › Ruby 2.7

модуль SecureRandom

Интерфейс генератора псевдослучайных чисел.

Эта библиотека — интерфейс к генераторам псевдослучайных чисел, подходящим для генерации ключей сессий в HTTP-куках и т. д.

Вы можете использовать эту библиотеку в своём приложении, потребовав её:

require 'securerandom'

Она поддерживает следующие генераторы псевдослучайных чисел:

  • openssl

  • /dev/urandom

  • Win32

SecureRandom расширяется модулем Random::Formatter, который определяет следующие методы:

  • alphanumeric

  • base64

  • choose

  • gen_random

  • hex

  • rand

  • random_bytes

  • random_number

  • urlsafe_base64

  • uuid

Эти методы можно использовать как методы класса SecureRandom, например, `SecureRandom.hex`.

Примеры

Генерация случайных шестнадцатеричных строк:

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"

Генерация буквенно-цифровых строк:

SecureRandom.alphanumeric(10) #=> "S8baxMJnPl"
SecureRandom.alphanumeric(10) #=> "aOxAg8BAJe"

Генерация UUID:

SecureRandom.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594"
SecureRandom.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab"

Методы публичного класса

bytes(n) Показать исходный код
# File lib/securerandom.rb, line 71
def bytes(n)
  return gen_random(n)
end
gen_random(n) Показать исходный код
# File lib/securerandom.rb, line 75
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
          public :gen_random
        end
      end
      return gen_random(n)
    end
  else
    @rng_chooser.synchronize do
      class << self
        remove_method :gen_random
        alias gen_random gen_random_urandom
        public :gen_random
      end
    end
    return gen_random(n)
  end
end

Методы частного класса

gen_random_openssl(n) Показать исходный код
# File lib/securerandom.rb, line 106
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
gen_random_urandom(n) Показать исходный код
# File lib/securerandom.rb, line 121
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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API