ruby-on-rails - 使用 SecureRandom.base64 在 Rails 中生成安全令牌的推荐数字是多少?
问题描述
我正在使用SecureRandom.base64(16)
,但我不确定这是否足够。我也不确定到底是什么16
意思。我会做出一个明智的猜测,那就是生成的随机字符的数量,但一些测试证明了这一点。
例如
SecureRandom.base64(16)
=> "Hqncn1pVVHzoBJkFNpat4g==" # 22 characters, plus 2 equals signs at the end
解决方案
您的答案可以在ruby 文档中找到。让我引用:
SecureRandom.base64
生成一个随机的 base64 字符串。参数 n 指定要生成的随机数的长度(以字节为单位)。结果字符串的长度约为 n 的 4/3。
如果 n 未指定或为 nil,则假定为 16。未来可能会更大。
结果可能包含 AZ、az、0-9、“+”、“/”和“=”。
require 'securerandom' SecureRandom.base64 #=> "/2BuBuLf3+WfSKyQbRcc/A==" SecureRandom.base64 #=> "6BbW0pxO0YENxn38HMUbcQ=="
如果安全随机数生成器不可用,则会引发 NotImplementedError。
有关 base64 的定义,请参阅 RFC 3548。
所以你会看到这n
是你的随机数将拥有的字节数。输出字符串中的不同长度来自将该数字转换为 base64。base64 编码需要比整数更多的字节来存储相同的信息。
如果n=16
足够,取决于您的具体用例。您可能想研究产生冲突的可能性(产生相同输出的两个随机数生成)以及导致应用程序风险的可能性有多大。
推荐阅读
- r - 在 R 中使用具有多个结果的函数在 mutate 中创建多个列
- android-studio - 进度条没有改变循环中的进度
- javascript - JSON stringify 在刷新后显示对象对象
- python - 如何允许python文件导出以后可以导入的特定函数?
- r - emacs ess-indent-or-complete 将换行符发送到 R 进程
- java - HSSFWorkbook 中的结构锁定可能吗?
- java - 成功注册到应用程序后,Android Activity 没有变化
- python - Python:如何在每个 ID 的日期之间填充行?
- python - VScode自动完成奇怪的行为Python
- python - 如何将 str "oneninetwoninenine" 转换为 19299