可以找到满足这个条件的字符串吗?

时间:2017-10-13 13:58:16

标签: php security cryptography md5

$myStr = $_GET['myStr'];
if ($myStr == md5($myStr)) echo "ok\n"; 

我知道代码中有一种类型jugglying,但在我的测试中,我找不到满足条件的输入。

2 个答案:

答案 0 :(得分:1)

不,你找不到col2值,因为它会找到MD5的(第一度)预图像。尽管MD5因抗碰撞性而被破坏,但您应该无法找到预先映像。更多信息here

我假设您的代码相当于找到df2Sub CheckBox1_Click() HideRows "2:5" End Sub Sub HideRows(rowRange) If CheckBox1 = False Then Rows(rowRange).EntireRow.Hidden = True Else: Rows(rowRange).EntireRow.Hidden = False End If End Sub 是一个更普遍的假设,并且在上面链接的维基百科文章中描述了即使对于MD5也不可能找到这样的myStr

这并不意味着你应该使用MD5。请使用SHA-256,SHA-512或SHA-3功能之一。即使MD5还没有被打破,它已被打破,不再被使用了; "攻击总是变得更好;他们永远不会变得更糟。"

答案 1 :(得分:0)

让我们从头开始。我将提供一个例子,以便我可以帮助您理解更好。

在第一行中您有$myStr = $_GET['myStr']; 我将假设您将从您的网址获取此变量,如下所示:

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

这将为您的变量$ myStr赋值“test”。

继续你的if语句:

if ($myStr == md5($myStr)

这永远不会成立,因为$myStr值为"test"md5($myStr)值为098f6bcd4621d373cade4e832627b4f6所以基本上您将2个字符串与值"test"和{{进行比较1}}这将永远导致错误。