簡體   English   中英

PHP:從哈希解密密碼

[英]PHP : Decrypt password from hash

因此,我使用以下代碼成功地將密碼加密為密碼哈希:

class PassHash 
{

    // blowfish
    private static $algo = '$2a';
    // cost parameter
    private static $cost = '$10';

    // mainly for internal use
    public static function unique_salt() 
    {
        return substr(sha1(mt_rand()), 0, 22);
    }

    // this will be used to generate a hash
    public static function hash($password) 
    {

        return crypt($password, self::$algo .
                self::$cost .
                '$' . self::unique_salt());
    }

    // this will be used to compare a password against a hash
    public static function check_password($hash, $password) 
    {
        $full_salt = substr($hash, 0, 29);
        $new_hash = crypt($password, $full_salt);
        return ($hash == $new_hash);
    }

}

這就是我加密密碼的方式:

 $password_hash = PassHash::hash($user->getPasswordHash());

但是,當我嘗試以普通模式顯示密碼時,我現在有一個小問題。

從該哈希解密密碼的最佳方法是什么?

您不能解密哈希(嗯...從技術上講可以,但是您不應該),這就是哈希的用途(不可解密)。 您將要使用與存儲的哈希相同的哈希算法對收到的密碼進行加密(哈希),然后將哈希相互比較。

$password_hash = PassHash::hash($user->getPasswordHash());
if($stored_password === $password_hash){
    //The passwords are the same
}

總而言之,您不希望讓任何人(甚至不是您自己)知道用戶的密碼( 或與此相關的哈希 )。 用戶會知道,因為他輸入了它並記住了(希望仍然如此)。 沒有其他人可以看到用戶的密碼/哈希。 讓除用戶之外的其他任何人看到/知道密碼/哈希是一個嚴重的安全問題。

另一注:您應使用默認實現進行哈希處理。 使用自己的哈希算法總是比真正的嘗試和測試方法差。 我不確定您使用的是哪個PHP版本,但是從PHP 5.5起,您可以使用password_hash() 有關更多信息,請查看問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM