Md5
是否可以證明任何 x 的 md5(x) != x?
如果可能的話,我正在尋找一個易於理解的解釋,以證明/證明此斷言的有效性(或無效!):
對於任何 X,md5(X) != X(即 X 任何 32 個十六進製字元的字元串)
不知道有沒有固定點。因為
MD5
給你 128 位,你也需要一個 128 位的輸入。那就是您實際上正在考慮從 128 位字元串集合到 128 位字元串的函式。假設這樣一個函式是隨機選擇的。然後我們可以計算函式有一個不動點的機率。答案在這個答案中說明:https ://stackoverflow.com/questions/235785/is-there-an-md5-fixed-point-where-md5x-x 。進一步解壓:說你有任何 $ 2^{128} $ 可能的輸入。那麼這是一個不動點的機率是 $ (1/2)^{128} $ 因為,例如,第一位必須映射到第一位,依此類推。所以輸入不是固定點的機率是 $ 1 - (1/2)^{128} $ . 所以沒有輸入是固定點的機率是
$ (1 - (1/2)^{128})^{(2^{128})} $
因為有 $ 2^{128} $ 可能的輸入。
因此存在不動點的機率為 $ 1 - (1 - (1/2)^{128})^{(2^{128})} $ . 如果你計算這個機率,你會得到大約 63.21%。
所以實際上很可能有一個固定點
MD5
或任何其他散列函式。請注意,這並不能證明存在一個固定點,而只是說明了可能性。
展示/證明是否存在固定點的唯一方法是計算所有 128 位字元串的所有雜湊值並將它們與輸出進行比較。但是,正如上面評論中的註釋,這不是很實用。