gla*_*kou 5 ruby ruby-on-rails ruby-on-rails-3
我想生成一个完全随机的"唯一"(我将确保使用我的模型)给定的标识符(长度可能不同)长度包含数字,字母和特殊字符
例如:
161551960578281|2.AQAIPhEcKsDLOVJZ.3600.1310065200.0-514191032|
Run Code Online (Sandbox Code Playgroud)
有人可以建议在Ruby on Rails中最有效的方法吗?
编辑:重要提示: 如果可能,请评论您提出的解决方案的效率,因为每次用户进入网站时都会使用此解决方案!
谢谢
emb*_*oss 12
将此用作访问令牌与UUID不同.您不仅需要伪随机性,还需要一个加密安全的PRNG.如果你真的不关心你使用的是什么字符(它们没有向安全性添加任何内容),你可以使用以下内容,生成一个URL安全的Base64编码的访问令牌.如果您将令牌附加到URL,URL安全性就变得很重要,类似于某些Java Web应用程序所做的那样:"http://www.bla.com/jsessionid=".如果您为此目的使用原始Base64字符串,则会产生可能无效的URL.
require 'securerandom'
def produce_token(length=32)
token = SecureRandom.urlsafe_base64(length)
end
Run Code Online (Sandbox Code Playgroud)
获得重复的概率等于2 ^( - 长度).由于输出将采用Base64编码,因此实际输出长度为4/3*.如果已安装,则基于本机OpenSSL PRNG实现,因此在性能方面应该非常高效.如果没有安装OpenSSL扩展,/dev/urandom将在可用时使用,最后,如果您在Windows机器上,CryptGenRandom将用作后备.这些选项中的每一个都应该具有足够的性能.例如,在我的笔记本电脑上运行produce_token一百万次完成~6s.
| 归档时间: |
|
| 查看次数: |
2986 次 |
| 最近记录: |