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

- Home
- Core 2.3.7
- Std-lib 2.3.7
- Downloads

Support for the Ruby 2.3 series has ended. See here for reference.

### Home Classes Methods

### In Files

- securerandom.rb

### Namespace

- MODULE SecureRandom::OpenSSL

### Methods

- ::gen_random

### Class/Module Index

Quicksearch

- Random
- Random::Formatter
- SecureRandom
- SecureRandom::OpenSSL

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

gen_random(n) click to toggle source

                   # File securerandom.rb, line 50
    def self.gen_random(n)
      @pid = 0 unless defined?(@pid)
      pid = $$
      unless @pid == pid
        now = Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond)
        ary = [now, @pid, pid]
        OpenSSL::Random.random_add(ary.join("").to_s, 0.0)
        seed = Random.raw_seed(16)
        if (seed)
          OpenSSL::Random.random_add(seed, 16)
        end
        @pid = pid
      end
      return OpenSSL::Random.random_bytes(n)
    end