2012-06-17 30 views
0

首先,請溫柔一點,我對DB設計知之甚少。我正在與Splunk一起根據客戶呼叫信息(呼叫詳細記錄)生成記錄。由於數量龐大,我無法真正使用splunk來處理某些數據,因爲它是非關係性的。所以我會把數據帶入,使用splunk做一些簡單的警報,監視奇怪的模式,並做一些其他更高級的事情。我最容易獲得的數據源已經在系統上近乎實時地提供了。我想要做的是將傳入的SIP呼叫Id(由RFC定義必須是全局唯一的),傳出的SIP呼叫標識(再次,必須是全局唯一的定義),當前unix曆元時間,然後隨機生成數字從1-2^31,將它們連接在一起,然後採用結果的md5散列並將其用作主鍵。我們碰到碰撞的可能性有多大?任何其他方法的意見將非常感激。使用MD5哈希作爲數據庫的主鍵?

+0

你可以簡單地使用你的結果字符串沒有md5。 DB會爲你做。 – kofemann

+2

請記住,根據最近的研究「MD5應該被認爲是密碼破解,不適合進一步使用」。 http://en.wikipedia.org/wiki/MD5 –

回答

2

發生碰撞的可能性大約爲1^2^128,但由於md5有些破裂,如果對手知道RNG的某些信息,攻擊者可能會在理論上更頻繁地創建碰撞。我認爲你可以直接使用創建的值,而不用散列,或者考慮碰撞可能導致的風險併爲此做好計劃。

+0

對主鍵中包含的字符沒有限制嗎?還有一些標點符號(主要是帶有點,破折號和@的字母數字字符)。 – Matthew

+1

這應該是好的。至少MySQL支持VARCHAR主鍵,到目前爲止,根據您的描述,您不會有任何密鑰長度或內容問題。當然,注意SQL注入。 – jjrv

+0

太好了,謝謝! – Matthew