Каков рекомендуемый номер для генерации безопасных токенов в рельсах с SecureRandom.base64? - PullRequest
0 голосов
/ 07 июля 2019

Я использую SecureRandom.base64(16), но я не совсем уверен, достаточно ли этого. Я также не уверен, что именно означает 16. Я бы сделал разумное предположение, что это число генерируемых случайных символов, но некоторые тесты это опровергают.

* 1005 Е.Г. *

SecureRandom.base64(16)
=> "Hqncn1pVVHzoBJkFNpat4g==" # 22 characters, plus 2 equals signs at the end


1 Ответ

1 голос
/ 07 июля 2019

Ваш ответ можно найти в 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, зависит от вашего конкретного варианта использования.Возможно, вы захотите выяснить, какова вероятность возникновения коллизии (два поколения случайных чисел дают один и тот же результат) и насколько вероятно, что это приведет к риску вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...