2010-11-25 61 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