我从未在PHP中见过这个fatal error
…当我在github上找到一个密码哈希类时,它开始了:
$Config = array(
"Depreciated" => 1,
"Notices" => 1,
"Errors" => 1,
"Warnings" => 1,
);
$Salt_Settings= 1;
$Password_Hashing = new SlayerSolutions'Authentication($Salt_Settings,$Config);
$Password_Hashing ->SetSalt("f4dd32");
$Password_Hashing ->SetKey("Login");
$Password_Hashing ->SetPositioning(0);
$Password_Entities = $Password_Hashing ->Password_Props($_POST['Password']);
$Result_Array = $Password_Hashing ->Hash_Password($Password_Entities );
返回:
致命错误:不正确使用哈希函数。这一定是在步骤过程中执行。
我无法查看类的实际代码结构,因为它似乎是用ioncube或其他东西编码的
您的错误来自没有这样做:
$Formatted_Password = $FrameWork->Format_Password($Password_Entities);
这实际上设置了$this->Props_Called = 1;
。完全没有意义的狗屎。
为什么你不应该使用这个:
第一个OMGWTFBBQ时刻:
else{
$length = mt_rand(0,25);
$characters = '0123456789abcdefghijklmnopqrstuvwxyz';
$string = '';
for ($p = 0; $p < $length; $p++) {
$string .= $characters[mt_rand(5, strlen($characters) -1)];
}
$this->Salt = $string; // Set Salt Randomly Generated
}
这段代码生成一个随机的盐。这个家伙没有利用完整的255字节或更多的ASCII,而是将自己限制在36字节。熵不是255^N,而是36^N。这是一个大的损失。
第二个WTF瞬间:
if ($this->Positioning == 0){
$Return_Array['SaltedPassword'] = $Password_Props['Password'].$Password_Props['Salt'];
}
if ($this->Positioning == 1){
$Return_Array['SaltedPassword'] = $Password_Props['Salt'].$Password_Props['Password'];
HMAC的整个POINT是盐键,不是消息。这有一个非常重要的原因:这是由于HMAC哈希工作的方式。
(记录:HMAC-ALGO = ALGO( (key XOR pad1) CONCAT ALGO( (key XOR pad2) CONCAT value))
)
这个是一个主要问题。再一次,你在做这件事的过程中损失了很多。现在;如果你的salt在value中,你的算法相当于ALGO(key ALGO(value)),这并不比ALGO(value)好。键).
这一点的参考在这里:https://stackoverflow.com/a/7273257/2167834