Module: SecureRandom (Ruby 2.5.7)
Description: Module : SecureRandom - Ruby 2.5.7

### Home Classes Methods

### In Files

- securerandom.rb

### Methods

- ::bytes
- ::gen_random

### Class/Module Index

Quicksearch

- Random
- Random::Formatter
- SecureRandom

No matching classes.

# SecureRandom

## Secure random number generator interface.¶ ↑

This library is an interface to secure random number generators which are suitable for generating session keys in HTTP cookies, etc.

You can use this library in your application by requiring it:

    require 'securerandom'

It supports the following secure random number generators:

- openssl

- /dev/urandom

- Win32

### Examples¶ ↑

Generate random hexadecimal strings:

    require 'securerandom'

    p SecureRandom.hex(10) #=> "52750b30ffbc7de3b362"
    p SecureRandom.hex(10) #=> "92b15d6c8dc4beb5f559"
    p SecureRandom.hex(13) #=> "39b290146bea6ce975c37cfc23"

Generate random base64 strings:

    p SecureRandom.base64(10) #=> "EcmTPZwWRAozdA=="
    p SecureRandom.base64(10) #=> "KO1nIU+p9DKxGg=="
    p SecureRandom.base64(12) #=> "7kJSM/MzBJI+75j8"

Generate random binary strings:

    p SecureRandom.random_bytes(10) #=> "\016\t{\370g\310pbr\301"
    p SecureRandom.random_bytes(10) #=> "\323U\030TO\234\357\020\a\337"

Generate UUIDs:

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

### Public Class Methods

bytes(n) click to toggle source

                   # File securerandom.rb, line 49
    def bytes(n)
      return gen_random(n)
    end

gen_random(n) click to toggle source

                   # File securerandom.rb, line 53
    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