是否存在乙個字串,它的md5值是其自身?

時間 2021-05-05 15:41:25

1樓:Belleve

MD5 是否有不動點尚無定論

週期軌的話……你從全 0 開始反覆 MD5 總能構造出乙個來,因為所有 128 位串數量是有限的

2樓:悽臨雨

按我的經驗,650tiboost顯示卡加速的多執行緒md5演算法,1億或10億條/s的水平!!!!是不是嚇人?,just try!

3樓:fly andy

可以比較明確的說沒有,從hash運算的角度來說1. 好的hash運算在同等位數的情況來說是滿對映的,2.hash運算是雪崩效應,即使微小的改動,hash會發生較大的變化你可以驗證所有的hash運算結果(32位的,比如crc等),沒有這樣的可能

4樓:

削弱版一定存在的。。

構造方法很簡單,先隨便來一段隨機字元,然後迴圈:

如果當前字元不含其自身md5,那麼將其md5加在當前字元之後;

如果包含的話return

end if

迴圈一定結束,因為md5 space 有限

5樓:

這問題挺有意思的,如果擴充套件一下,變成對於乙個加密演算法,假設明文和密文等長,明文是否有可能和密文相等。這個答案是肯定的,因為任何加密演算法都可以看作是規定長度的二進位制位的組合。如果明文只有一位,例如0,如果通過某個演算法,密文也是0的話,就出現了明文和密文一致。

這種極端情況下搜尋空間只有1位,也就是所有可能性是2^1次。你心算就好。如果是md5演算法,輸出128位的,那麼搜尋空間急劇增大,對於每一組明文,搜尋空間變成2^128,那暴力破解基本是做不到了。

那如何解決這個搜尋問題呢,目前的基本思路是通過某些演算法的數學特性來降低搜尋空間,比如把搜尋空間從2^128降低到2^100就是一種進步。對於MD5這種HASH演算法,它的破解可以理解為找到乙個碰撞,也就是兩個不同的明文,MD5後的128位的HASH碼相同。目前這個搜尋空間已經降低到了2^50左右(數字不太準確,手機打,懶得看網頁查精確資料了)。

關於題主的問題,明文和密文(Hash值)完全一樣,應該是找碰撞的乙個子問題,目前通過數學方式解決它的話,搜尋複雜度差不多就是2^50左右吧。

6樓:

要說它一定有,應該也不可能,比如說最簡單的例子:

2^2通過y=f(x) x=0,1,2,3對映到y=3,2,1,0。

找不到乙個x可以讓x=f(x)。

要麼證明hash128不屬於上面的f(x)型別。

要麼證明2^128 到2^128的對映,存在fixed point。

有時間了用彙編在支援HW hash的機器上寫個程式試試看就好了。

update:下面的計算方式太慢了。

如果是128bit的計算機,應該是挺快才對:

for(

UInt128i=

0;i<

=MAX_UInt128,i

++)}

7樓:hunt zhan

有人也在找MD5的fixed point. See this: The Kember Identity : Elliott Kember dot Com

C語言,用陣列定義乙個字串,那這個字串是怎麼儲存在這個陣列中的呢?

the gc 對於scanf的 s的解釋如下 Matches a sequence of non white space characters the nextpointer must be a pointer to the initial element of acharacter array t...

是否存在乙個字串str,使sha1 str str?

我們來乙個暴破法 from future import print function from binascii import unhexlify from hashlib import sha1 from itertools import product import string 測試純數字集 ...

如何通過只翻轉乙個字串的子串對該字串進行排序?

老版題是NP很多人已經給出參考文獻了。新版題是裸dp 設len是字串strls的長度,那麼定義dp len 1 2 表示直到長度x 0 x len 最後一位strls x 1 不翻轉 翻轉 0 1 所需的最小翻轉次數。 yaoyao 反轉兩個字元的子串不就是交換兩個字元的位置嗎?這是氣泡排序呀 喵的...