Md5

MD5 算法是否只對字節有用,而不是位?

  • September 20, 2020

MD5 算法旨在接受任意長度的消息並生成 512 位的消息摘要。由於它填充原始消息的方式,通過添加一個 1 位然後添加多個 0 位,消息的長度可以是任意數量的位。它不限於整數個字節。但它也可以被寫入僅以字節為單位工作,因此填充階段將涉及添加一個 0x80 字節,然後是多個 0x00 字節。最終結果是一樣的,只要輸入數據是整數字節。

但是,我的理解是數據幾乎總是以字節儲存。對於字元串尤其如此,其中每個字元至少由 1 個字節表示。對於這個案例,我相信面向字節的方法可以正常工作。但是,如果我想編寫一個也接受文件的 MD5 實現,那麼位/字節的區別會變得重要嗎?我是否需要編寫算法來專門處理位,或者面向字節的實現是否同樣適用於字元串(例如來自 STDIN)和文件?

換句話說,數據是否總是儲存為整個字節?如果是這樣,哪些應用程序需要編寫使用單個位而不是整個字節的 MD5 算法?

如果我想編寫一個也接受文件的 MD5 實現,那麼位/字節的區別會變得重要嗎?

,字節實現很好。在現代作業系統中,來自文件、管道、字元串(無論編碼如何)的散列是散列字節。

我製作和使用支持位的雜湊實現的唯一時間是製作或檢查測試向量。但我可以想像一些需要位支持的案例

  • 對於指定的假設算法,將表達式散列為整數的最小位數(根據某些指定的字節序)。
  • 人們想要一些 MD5 的變體,並通過將一個比字節短的後綴附加到饋送到 MD5 的字節串中來獲得這些變體。對於 15 字節消息,與附加整個字節(一個 32 字節而不是兩個字節的內部填充消息塊)相比,節省了計算量,並且避免了與正常 MD5 的輕微沖突。

引用自:https://crypto.stackexchange.com/questions/84051