致命错误:不正确地使用哈希函数


Fatal error: Incorrect Usage Of Hashing Functions

我从未在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