Ваш ответ можно найти в ruby документах .Позвольте мне привести:
SecureRandom.base64
генерирует случайную строку base64.
Аргумент n указывает длину в байтах генерируемого случайного числа.Длина строки результата составляет около 4/3 от n.
Если n не указано или равно nil, предполагается 16.Это может быть больше в будущем.
Результат может содержать AZ, az, 0-9, «+», «/» и «=».
require 'securerandom'
SecureRandom.base64 #=> "/2BuBuLf3+WfSKyQbRcc/A=="
SecureRandom.base64 #=> "6BbW0pxO0YENxn38HMUbcQ=="
Если безопасныйгенератор случайных чисел недоступен, NotImplementedError вызывается.
См. RFC 3548 для определения base64.
Итак, вы видите, что n
- это число байтов вашего случайного числаномер будет иметь.Различная длина в выходной строке происходит от преобразования этого числа в base64.Для кодирования base64 требуется больше байтов, чем целого числа, чтобы хранить ту же информацию.
Если достаточно n=16
, зависит от вашего конкретного варианта использования.Возможно, вы захотите выяснить, какова вероятность возникновения коллизии (два поколения случайных чисел дают один и тот же результат) и насколько вероятно, что это приведет к риску вашего приложения.