MD5生成Key存入redis會發生碰撞嗎?

2021-09-28 14:17:05 字數 1155 閱讀 5937

如果我們需要知道如上問題,首先需要新了解一下md5演算法,md5是128位hash碼(4個整數,每個整數4個位元組)。我們假設它的計算結果是足夠隨機和足夠分散的。因此,乙個檔案的md5碼,有2的128次方(用2e128表示,下面都用這種方式表示)個可能。進而 我們知道,隨意找出來的兩個檔案的md5碼相等的可能性,是2e128分之一。下面討論中,我們用r來表示這個概率(即r=2e-128)。

假設這十萬 個md5是一條條插入到資料庫中的。第二個md5插入時,它跟第一條重複的概率是r。第三條字串插入時,它有可能跟第一條重複,也有可能跟第二條重複, 因此總發生重複的概率是2×r。同理,第四條插入時發生重複的概率是3×r...第n條插入時發生重複的概率是(n-1)×r。n個md5碼,其中有兩個重複的概率是上面那麼多個可能的加和。

因此,n個md5碼,自然產生重複的概率是:

(1+2+3+...+(n-1))×r = (1/2)×n×(n-1)×r

以n=10e4,r=1/2e128 代入,得到重複的概率為:

(1/2)×10e4×(10e4-1)×(1/2e128)

10e4-1約等於10e4,上式可以簡化:

(1/2)×10e8×(1/2e128) = 10e8/(2×2e128)

我們使用近似2e10 = 1024 = 10e3,那麼

=10e8/(10e9*2e89)

=1/(10*2e89)

=1/(10*10e27)

=1/(10e28)

這個數字小得可憐,根據上面的計算,對於n個md5碼的集合,存在重複的概率是

(1/2)*(n/2e64)e2

因此,只有n大到可以與2e64比擬,才需要考慮它的衝突問題。

#補充:上面對於md5的計算,並未考慮到人為製造的md5衝突(現在已經有方法可以製造有衝突的md5碼了),也未考慮到計算md5碼時,因資料補零而造成的md5衝突。事實上,在一般的系統中,並沒有必要考慮這兩種情況。

綜上所屬我們使用md5生成的值作為redis的key並不會產生問題,畢竟很多密碼 也是儲存為md5形式來進行儲存,但是推薦在需要完全不能碰撞的情況下使用雙重驗證。

MD5生成函式

souce if you know,please tell me.thanks using system using system.collections.generic using system.componentmodel using system.data using system.drawi...

版本發布包MD5生成的辦法

linux下執行以下命令,生成md5檔案,md5檔案名字要與檔名相同 md5sum csvpn 3.0.tar.gz csvpn 3.0.tar.gz.md5 實施人員在實施前應用以下命令去校驗md5值,來衡量包是否完整 md5sum c csvpn 3.0.tar.gz.md5以下面操作為例 ro...

MD5 生成檔案校驗

linux 下 shell命令 製作md5碼 也用於軟體的md5校驗md5演算法常常被用來驗證網路檔案傳輸的完整性,防止檔案被人篡改。md5 全稱是報文摘要演算法 message digest algorithm 5 此演算法對任意長度的資訊逐位進行計算,產生乙個二進位制長度為128位 十六進製制長...