【发布时间】:2012-03-10 07:07:50
【问题描述】:
盐:可以是任何东西。
工作因素:可以是任何东西。
以下所有内容都会生成相同的哈希!
$pad = base64_decode('/gB=');
$data = array(
'LegitimatePayload',
'LaterSwitchedToMaliciousPayload',
'Abracadabra',
'hatIsGoingOn',
'CanBeAlmostAnything',
);
foreach($data as $str){
echo crypt($pad.$str, '$2a$04$AnySaltHere')."<br>\n";
}
输出:
$2a$04$AnySaltHere$$$$$$$$$$.m/QKi19jyBmSuP2VMcVuFRw.weCNRBa
$2a$04$AnySaltHere$$$$$$$$$$.m/QKi19jyBmSuP2VMcVuFRw.weCNRBa
$2a$04$AnySaltHere$$$$$$$$$$.m/QKi19jyBmSuP2VMcVuFRw.weCNRBa
$2a$04$AnySaltHere$$$$$$$$$$.m/QKi19jyBmSuP2VMcVuFRw.weCNRBa
$2a$04$AnySaltHere$$$$$$$$$$.m/QKi19jyBmSuP2VMcVuFRw.weCNRBa
$2a$04$AnySaltHere$$$$$$$$$$.m/QKi19jyBmSuP2VMcVuFRw.weCNRBa
编辑:
这是一个前两个字节相同但哈希值不同的字符串:
base64_decode('/gBQyoK71jVY/J7QuBNJuFdxyf2eTBCs42chkx6ZvpJYszpzg===')
如果 php 在第一个 NUL 字节处停止,那你如何解释呢?
【问题讨论】:
-
你的意思是
base64_encode? -
要么你发现了一个别人从未有过的错误,要么是你的代码。提示,这是第二个。
-
我也看不出在这里插入恶意负载有什么意义。
crypt不是为完整性检查而设计的。它专为密码哈希而设计。因此,即使它以您声称的方式被破坏,唯一的后果是:不要选择以这些字符开头的密码。 -
某些语言使用二进制安全字符串。众所周知,大多数 php 函数都不是二进制安全的,并且会因包含
\0的字符串而中断。因此,除非您证明问题不只是 php 在第一个\0字符处停止,否则 IMO 应该投反对票。 -
我真的不知道为什么这个问题会得到如此多的反对。 +1。
标签: php security encryption bcrypt collision