2010-11-25 22 views
0

我需要创建一个唯一的ID来保护非常安全的东西。rails - 建议提供一个安全的UUID

现在在Rails的我做:

uuid = (UUIDTools::UUID.timestamp_create().to_s.gsub('-','') + UUIDTools::UUID.timestamp_create().to_s.gsub('-','')) 

你对这种方法的想法?聪明?坏?建议?

感谢

+0

安全意味着什么?碰撞的概率? – Mobbit 2010-11-25 08:11:10

+1

`保护一些非常安全的东西??`o_O – 2010-11-25 21:07:50

回答

2

如果你想让你的标识符对任何对手来说都是不可预知的,你将需要使用一个密码强的伪随机数生成器。就位大小而言,128位(或16位)是一个很好的数字。

# if using Ruby < 1.9: 
require 'active_support/secure_random' 

id = SecureRandom.random_bytes(16) 

也有方法.hex.base64,并.urlsafe_base64为您提供方便。这些只是生成相应数量的随机字节,然后在适当的方案中对随机字节进行编码。例如,SecureRandom.hex(16)将为您提供32个安全随机的十六进制字符。

2

很难在没有更多上下文的情况下为您的问题规定解决方案,但质量好的伪随机数很可能会有用。在Rails中,ActiveSupport :: SecureRandom对此非常方便。

+0

非常好,你如何使用ActiveSupport :: SecureRandom?你能举一个例子吗?谢谢!!! – AnApprentice 2010-11-25 21:14:08

0

它将生成一个v4随机UUID(通用唯一标识符),在整个大型命名空间中是唯一唯一编号,以在数据库中生成一个标识。

require 'securerandom' 
UUID = SecureRandom.uuid