[英]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.