使用SecureRandom.base64在rails中生成安全令牌的建议数量是多少?

时间:2019-07-07 13:30:16

标签: ruby-on-rails ruby

我正在使用SecureRandom.base64(16),但是我不确定是否足够。我也不确定16到底是什么意思。我会做出一个合理的猜测,那就是生成的随机字符的数量,但是一些测试证明了这一点。

例如

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


1 个答案:

答案 0 :(得分:1)

您的答案将在ruby docs中找到。让我引用:

  

SecureRandom.base64生成一个随机的base64字符串。

     

自变量n指定要设置的随机数的长度(以字节为单位)   被生成。结果字符串的长度约为n的4/3。

     

如果未指定n或为nil,则假定为16。它可能在   未来。

     

结果可能包含A-Z,a-z,0-9,“ +”,“ /”和“ =”。

require 'securerandom'

SecureRandom.base64 #=> "/2BuBuLf3+WfSKyQbRcc/A=="
SecureRandom.base64 #=> "6BbW0pxO0YENxn38HMUbcQ=="
     

如果没有安全的随机数生成器,   引发NotImplementedError。

     

有关base64的定义,请参阅RFC 3548。

因此,您看到n是随机数将具有的字节数。输出字符串中不同的长度来自将该数字转换为base64。 base64编码需要比整数更多的字节来存储相同的信息。

如果n=16足够,则取决于您的特定用例。您可能想研究产生冲突的可能性(两个随机数代产生相同的输出)以及造成冲突风险的可能性。