модуль Random::Formatter
Форматирование случайного числа как Random делает
Константы
- ALPHANUMERIC
Открытые методы экземпляров
# File lib/securerandom.rb, line 326 def alphanumeric(n=nil) n = 16 if n.nil? choose(ALPHANUMERIC, n) end
SecureRandom.alphanumeric генерирует случайную строку из символов алфавита и цифр.
Аргумент n задаёт длину строки из символов алфавита и цифр в символах.
Если n не указан или равен nil, предполагается значение 16. В будущем оно может быть больше.
Результат может содержать символы A-Z, a-z и 0-9.
require 'securerandom' SecureRandom.alphanumeric #=> "2BuBuLf3WfSKyQbR" SecureRandom.alphanumeric(10) #=> "i6K93NdqiH"
Если генератор случайных чисел с безопасностью не доступен, генерируется исключение NotImplementedError.
# File lib/securerandom.rb, line 197
def base64(n=nil)
[random_bytes(n)].pack("m0")
end SecureRandom.base64 генерирует случайную строку в формате base64.
Аргумент n задаёт длину, в байтах, случайного числа, которое будет сгенерировано. Длина результирующей строки примерно равна 4/3 от n.
Если n не указан или равен nil, предполагается значение 16. В будущем оно может быть больше.
Результат может содержать символы A-Z, a-z, 0-9, “+”, “/” и “=”.
require 'securerandom' SecureRandom.base64 #=> "/2BuBuLf3+WfSKyQbRcc/A==" SecureRandom.base64 #=> "6BbW0pxO0YENxn38HMUbcQ=="
Если генератор случайных чисел с безопасностью не доступен, генерируется исключение NotImplementedError.
См. RFC 3548 для определения формата base64.
# File lib/securerandom.rb, line 174
def hex(n=nil)
random_bytes(n).unpack("H*")[0]
end SecureRandom.hex генерирует случайную шестнадцатеричную строку.
Аргумент n задаёт длину, в байтах, случайного числа, которое будет сгенерировано. Длина результирующей шестнадцатеричной строки в два раза больше n.
Если n не указан или равен nil, предполагается значение 16. В будущем оно может быть больше.
Результат может содержать символы 0-9 и a-f.
require 'securerandom' SecureRandom.hex #=> "eb693ec8252cd630102fd0d0fb7c3485" SecureRandom.hex #=> "91dc3bfb4de5b11d029d376634589b61"
Если генератор случайных чисел с безопасностью не доступен, генерируется исключение NotImplementedError.
static VALUE
rand_random_number(int argc, VALUE *argv, VALUE obj)
{
rb_random_t *rnd = try_get_rnd(obj);
VALUE v = rand_random(argc, argv, obj, rnd);
if (NIL_P(v)) v = rand_random(0, 0, obj, rnd);
else if (!v) invalid_argument(argv[0]);
return v;
} Генерирует отформатированное случайное число из исходных случайных байтов. См. Random#rand.
# File lib/securerandom.rb, line 152 def random_bytes(n=nil) n = n ? n.to_int : 16 gen_random(n) end
SecureRandom.random_bytes генерирует случайную двоичную строку.
Аргумент n задаёт длину результирующей строки.
Если n не указан или равен nil, предполагается значение 16. В будущем оно может быть больше.
Результат может содержать любые байты: “x00” - “xff”.
require 'securerandom' SecureRandom.random_bytes #=> "\xD8\\\xE0\xF4\r\xB2\xFC*WM\xFF\x83\x18\xF45\xB6" SecureRandom.random_bytes #=> "m\xDC\xFC/\a\x00Uf\xB2\xB2P\xBD\xFF6S\x97"
Если генератор случайных чисел с безопасностью не доступен, генерируется исключение NotImplementedError.
static VALUE
rand_random_number(int argc, VALUE *argv, VALUE obj)
{
rb_random_t *rnd = try_get_rnd(obj);
VALUE v = rand_random(argc, argv, obj, rnd);
if (NIL_P(v)) v = rand_random(0, 0, obj, rnd);
else if (!v) invalid_argument(argv[0]);
return v;
} Генерирует отформатированное случайное число из исходных случайных байтов. См. Random#rand.
# File lib/securerandom.rb, line 229
def urlsafe_base64(n=nil, padding=false)
s = [random_bytes(n)].pack("m0")
s.tr!("+/", "-_")
s.delete!("=") unless padding
s
end SecureRandom.urlsafe_base64 генерирует случайную строку в URL-безопасном формате base64.
Аргумент n задаёт длину, в байтах, случайного числа, которое будет сгенерировано. Длина результирующей строки примерно равна 4/3 от n.
Если n не указан или равен nil, предполагается значение 16. В будущем оно может быть больше.
Логический аргумент padding задаёт наличие заполнения. Если он равен false или nil, заполнение не генерируется. В противном случае заполнение генерируется. По умолчанию заполнение не генерируется, потому что “=” может использоваться как разделитель в URL.
Результат может содержать символы A-Z, a-z, 0-9, “-” и “_”. “=” также используется, если padding равен true.
require 'securerandom' SecureRandom.urlsafe_base64 #=> "b4GOKm4pOYU_-BOXcrUGDg" SecureRandom.urlsafe_base64 #=> "UZLdOkzop70Ddx-IJR0ABg" SecureRandom.urlsafe_base64(nil, true) #=> "i0XQ-7gglIsHGV2_BNPrdQ==" SecureRandom.urlsafe_base64(nil, true) #=> "-M8rLhr7JEpJlqFGUMmOxg=="
Если генератор случайных чисел с безопасностью не доступен, генерируется исключение NotImplementedError.
См. RFC 3548 для определения URL-безопасного формата base64.
# File lib/securerandom.rb, line 251
def uuid
ary = random_bytes(16).unpack("NnnnnN")
ary[2] = (ary[2] & 0x0fff) | 0x4000
ary[3] = (ary[3] & 0x3fff) | 0x8000
"%08x-%04x-%04x-%04x-%04x%08x" % ary
end SecureRandom.uuid генерирует случайный UUID версии 4 (универсальный уникальный идентификатор).
require 'securerandom' SecureRandom.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594" SecureRandom.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab" SecureRandom.uuid #=> "62936e70-1815-439b-bf89-8492855a7e6b"
UUID версии 4 полностью случайный (кроме версии). Он не содержит значимой информации, такой как адреса MAC, метки времени и т. д.
Результат содержит 122 случайных бита (15.25 случайных байтов).
См. RFC 4122 для получения подробностей о UUID.
Закрытые методы экземпляров
# File lib/securerandom.rb, line 279
def choose(source, n)
size = source.size
m = 1
limit = size
while limit * size <= 0x100000000
limit *= size
m += 1
end
result = ''.dup
while m <= n
rs = random_number(limit)
is = rs.digits(size)
(m-is.length).times { is << 0 }
result << source.values_at(*is).join('')
n -= m
end
if 0 < n
rs = random_number(limit)
is = rs.digits(size)
if is.length < n
(n-is.length).times { is << 0 }
else
is.pop while n < is.length
end
result.concat source.values_at(*is).join('')
end
result
end SecureRandom.choose генерирует строку, случайным образом выбирая символы из массива символов.
Аргумент source задаёт массив символов, из которого генерируется строка. Аргумент n задаёт длину строки в символах.
Результат может содержать любые символы из массива source.
require 'securerandom' SecureRandom.choose([*'l'..'r'], 16) #=> "lmrqpoonmmlqlron" SecureRandom.choose([*'0'..'9'], 5) #=> "27309"
Если генератор случайных чисел с безопасностью не доступен, генерируется исключение NotImplementedError.
# File lib/securerandom.rb, line 258
def gen_random(n)
self.bytes(n)
end
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.