Module: SecureRandom
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
::Random::Formatter
|
|
Defined in: | lib/securerandom.rb |
Overview
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
SecureRandom
is extended by the ::Random::Formatter
module which defines the following methods:
-
alphanumeric
-
base64
-
choose
-
gen_random
-
hex
-
rand
-
random_bytes
-
random_number
-
urlsafe_base64
-
uuid
These methods are usable as class methods of SecureRandom
such as SecureRandom.hex
.
Examples
Generate random hexadecimal strings:
require 'securerandom'
SecureRandom.hex(10) #=> "52750b30ffbc7de3b362"
SecureRandom.hex(10) #=> "92b15d6c8dc4beb5f559"
SecureRandom.hex(13) #=> "39b290146bea6ce975c37cfc23"
Generate random base64 strings:
SecureRandom.base64(10) #=> "EcmTPZwWRAozdA=="
SecureRandom.base64(10) #=> "KO1nIU+p9DKxGg=="
SecureRandom.base64(12) #=> "7kJSM/MzBJI+75j8"
Generate random binary strings:
SecureRandom.random_bytes(10) #=> "\016\t{\370g\310pbr\301"
SecureRandom.random_bytes(10) #=> "\323U\030TO\234\357\020\a\337"
Generate alphanumeric strings:
SecureRandom.alphanumeric(10) #=> "S8baxMJnPl"
SecureRandom.alphanumeric(10) #=> "aOxAg8BAJe"
Generate UUIDs:
SecureRandom.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594"
SecureRandom.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab"
Class Method Summary
- .bytes(n)
-
.gen_random(n)
private
Alias for .gen_random_urandom.
- .gen_random_openssl(n) private
- .gen_random_urandom(n) (also: .gen_random) private
::Random::Formatter
- Extended
alphanumeric |
|
base64 |
|
hex |
|
random_bytes |
|
urlsafe_base64 |
|
uuid |
|
choose |
|
gen_random |
Class Method Details
.bytes(n)
[ GitHub ]# File 'lib/securerandom.rb', line 70
def bytes(n) return gen_random(n) end
.gen_random(n) (private)
Alias for .gen_random_urandom.
# File 'lib/securerandom.rb', line 112
alias gen_random gen_random_urandom
.gen_random_openssl(n) (private)
[ GitHub ]# File 'lib/securerandom.rb', line 76
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_urandom(n) (private) Also known as: .gen_random
[ GitHub ]# File 'lib/securerandom.rb', line 91
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