Checksum

完整性檢查 MD5 和

  • December 12, 2012

MD5 校驗和是否包含校驗位?

我必須手動複製一些 MD5 校驗和(沒有其他方法),並且想知道是否有任何程式碼可以驗證校驗和是否有效,就像驗證信用卡號一樣。

為了清楚起見,我不是在問如何從文件中生成一個 MD5 總和,以便我可以將它與我得到的總和進行比較,我是在問是否有可能(我懷疑它是)驗證MD5 總和是真正的 MD5 總和,而實際上並未對用於生成總和的字節進行任何引用。

我想確定一個可能的錯字。

基本上,它沒有任何校驗和位。要辨識拼寫錯誤,您可以嘗試在同一通道上共享您的 MD5 和的校驗和(例如,MD5)並檢查它。

它實際上是加密雜湊(MD5 的目標)設計標準的結果,即存在這樣的東西。

當您將文件輸入理想的 128 位加密散列時,除了執行散列之外,您無法預測128 位輸出中的任何一個(或它們之間的關係)。如果可以,您實際上並沒有獲得 128 位雜湊。例如,如果雜湊有一個奇偶校驗位(一個位使得 1 的總數總是奇數

$$ odd parity $$甚至總是$$ even parity $$),那麼你實際上有一個 127 位的雜湊值。 並且為了確保您不會因拼寫錯誤而意外生成有效雜湊,您需要有超過 50/50 的機會檢測到它。所以你會失去更多的位。

問題是您想要一個 128 位散列是有原因的:一個額外的位通常會使攻擊散列所需的工作加倍。

如果冗餘是散列預期設計的一部分,那麼它將被稱為 124 位散列,具有 4 位 CRC(等等)。如果不是故意的,那麼它實際上是雜湊的部分密碼分析(破壞)。

實用解決方案

由於您想捕捉拼寫錯誤,只需添加任何校驗和或校驗位並將其寫在旁邊。您可以使用類似 perl 的Algorithm::Verhoeff來添加校驗位。

引用自:https://unix.stackexchange.com/questions/58281