如何實現一種在asp.net應用程序中爲用戶創建和分配ID的方法的最佳方式是什麼?創建通用用戶標識的最佳實踐
我想使用的DateTime蜱和線程ID
我想確保沒有任何碰撞和用戶ID是唯一的。
ID可以是一個字符串或長。
我應該使用MD5關於我從用戶收集的一些信息嗎?那會是什麼?
我看到md5的碰撞率非常低。
如何實現一種在asp.net應用程序中爲用戶創建和分配ID的方法的最佳方式是什麼?創建通用用戶標識的最佳實踐
我想使用的DateTime蜱和線程ID
我想確保沒有任何碰撞和用戶ID是唯一的。
ID可以是一個字符串或長。
我應該使用MD5關於我從用戶收集的一些信息嗎?那會是什麼?
我看到md5的碰撞率非常低。
最簡單的解決方案是自動增量號碼。這需要一箇中央服務器。
日期/時間加單向散列用於僞隨機ID。他們必須僞隨機安全嗎?這不應該依賴於唯一性,因爲根據定義,單向哈希會相互衝突。在發佈ID之前,您仍然需要中央服務器來檢查重複項。
如果ID是在分佈式系統中創建的(沒有中央服務器來生成ID),GUID是最好的。 GUID可以在不同的機器上生成,它們不應該相互衝突。取決於實施,但一些GUID算法只是僞隨機的,是的,仍然存在碰撞的可能性。
我會根據您提供的有限信息使用GUID。
保證唯一性? – DarthVader 2010-06-21 18:45:35
GUID並非總是最適合ID,特別是如果它們是數據庫中的主鍵,但考慮到原始問題的措辭,我必須同意。 – Randolpho 2010-06-21 18:45:41
是的。根據http://msdn.microsoft.com/en-us/library/system.guid.newguid.aspx「新Guid的值將全部爲零或等於任何其他Guid的可能性非常低。」 – Reddog 2010-06-21 18:45:50
Guid是迄今爲止用於生成用戶標識的唯一ID的最佳選擇。他們絕對保證是unique globally(因此名稱)。爲了最好地使用聚集索引,你應該使用NEWSEQUENTIALID()。這會生成可以附加到索引的順序標識符,並防止每次添加值時SQL Server必須重新組織和分頁索引。使用這個函數有一個小的安全問題,因爲可以確定序列中的下一個值。
GUID不是「絕對保證」是全球唯一的。微軟表示,他們的實施「被複制的可能性非常低」。 http://msdn.microsoft.com/en-us/library/system.guid.aspx – 2010-06-21 22:15:07
微軟還表示它們是全球唯一的:http://msdn.microsoft.com/en-us/library/ms190215(SQL。 90).aspx 「世界上沒有其他計算機會生成該GUID值的副本。」 ...但是我們正在談論不同的事情。你指的是.NET實現,我指的是Sql Server實現。因此我們都是對的。 – TheCodeKing 2010-06-23 18:32:39
是否存在任何安全問題 - ID是否應該難以猜測? 是否有任何性能問題?使用GUID的 – Mashmagar 2010-06-21 19:41:00