2017-10-13 108 views
-3
$myStr = $_GET['myStr']; 
if ($myStr == md5($myStr)) echo "ok\n"; 

我知道在代碼中存在一種類型,但在我的測試中,我找不到滿足條件的輸入。是否可以找到滿足此條件的字符串?

+0

這是你只需要做一些研究的基本的東西 –

+0

md5,在​​同一個標​​籤列表中的安全和加密是有點危險....這些天md5不應該用於任何與安全有關的事 –

+0

Don'不明白你想要什麼。你在「md5($ myStr)」後忘記了一個「)」 –

回答

0

讓我們從頭開始。我會提供一個例子,以便我可以幫助你更好地理解。

在第一行,你有$myStr = $_GET['myStr']; 我只是假設你會得到這個變量從您的網址是這樣的:

http://localhost/md5Project.php?myStr=test 

這將給你的變量$ myStr中值「測試」。

在你的if語句展望未來您有:

if ($myStr == md5($myStr) 

因爲$myStr"test"md5($myStr)098f6bcd4621d373cade4e832627b4f6所以基本上你比較兩個字符串與值"test""098f6bcd4621d373cade4e832627b4f6problem"這將永遠領導這個永遠不會爲真假。

+0

永遠不會是真的? https://stackoverflow.com/questions/235785/is-there-an-md5-fixed-point-where-md5x-x – Progrock

+0

@Progrock是**從來沒有**因爲除其他外,「測試」是4字節和MD5輸出是16個字節:兩個長度不同,所以永遠不會相等。 – zaph

+0

@zaph OP從未規定輸入是'測試'。 – Progrock

1

不,您無法找到myStr的值,因爲它會降低查找MD5的(第一級)前像。雖然MD5由於抗碰撞而被打破,但您不應該能夠找到預先圖像。更多信息here

我假設那裏你的代碼等於找到y = md5(y)y = md5(x)是一個更一般的假設,在上面鏈接到的維基百科文章中描述,即使對於MD5,也不可能找到這樣的H(x)


這並不意味着你應該使用MD5。請使用SHA-256,SHA-512或其中一種SHA-3功能。即使MD5到目前爲止還沒有被打破,它已經被打破了,不再被使用; 「攻擊總是變得更好,他們永遠不會變得更糟。」