簡體   English   中英

如何重新哈希存儲在我的數據庫中的密碼? (PHP)

[英]How to ReHash a password stored into my Database ? (PHP)

我的數據庫中已加密了一些密碼,我想找到一種顯示密碼的方法。 這是它們如何保存到我的mysql數據庫中的方法:

function generateHash($plainText, $salt = null){

                if ($salt === null)
  {
   $salt = substr(md5(uniqid(rand(), true)), 0, 25);
  }
  else
  {
   $salt = substr($salt, 0, 25);
  }

  return $salt . sha1($salt . $plainText);
 }

        $secure_pass = generateHash($this->clean_password);

然后$ secure_pass保存到我的數據庫中。

任何人都會有一個主意?

非常感謝你 ;)

您絕不能顯示密碼。
您絕不能顯示密碼。
您絕不能顯示密碼。

散列密碼的全部目的是使此操作變得不可能。

由於您使用的是某種不安全的哈希,因此不太可能,但仍然無法做到。

您應該使用SHA512而不是SHA1來使此操作變得更不可能。

密碼哈希的要點是它不可能逆向操作。 因此,基本上,這里的答案是否定的,你不能。

有無數個會產生任何哈希值的值,因此無法確定地復制給出的原始密碼。

但是,您可以通過以下方法之一顯示工作密碼:

Cavet:顯然,如果安全性對您很重要,則您不應執行上述任何一項操作。 如果您想允許忘記密碼的用戶,建議您閱讀有關密碼重置的信息。

你不能反向推散列函數...留下了兩個選擇:

1強制用戶插入新密碼或...

2在用戶再次登錄到系統時更新哈希(您可以強制執行cookie和允許用戶登錄而無需重新輸入密碼的會話)。 該解決方案將允許您的用戶使用舊哈希來登錄,同時您將舊哈希更新為新哈希。 下次您的用戶登錄時,腳本將使用新版本的hash來登錄用戶。

在此示例中,我將md5用作哈希,我想使用cost = 12更新到BCRYPT,但可以隨時將其更改為所需的值。 從BCRYPT成本= 10更改為BCRYPT成本= 12也可以,也可以是任何其他組合。 考慮以下示例:

$passwordFromDatabase = "0d107d09f5bbe40cade3de5c71e9e9b7"; // md5  hash of "letmein"
$passwordFromForm = $_POST['password']; // $_POST['password'] == "letmein"

if(password_needs_rehash($passwordFromDatabase, PASSWORD_BCRYPT, ["cost" => 12]) && md5($passwordFromForm) === $passwordFromDatabase){
    // generate new password
    $newPasswordHash = password_hash($passwordFromForm, PASSWORD_BCRYPT, ["cost" => 12]);
    // update hash from databse - replace old hash $passwordFromDatabase with new hash $newPasswordHash
    // after update login user
    if(password_veryfi($passwordFromForm, $newPasswordHash)){
        // user has loged in successfuly and hash was updated
        // redirect to user area
    }else{
        // ups something went wrong Exception
    }
}else{
    if($password_veryfi($passwordFromForm, $passwordFromDatabase)){
        // user password hash from database is already BCRYPTed no need to rehash
        // user has loged in successfuly
        // redirect to user area
    }else{
        // wrong password
        // no access granted - stay where you are
    }
}

我更喜歡第二種選擇:)。 自行選擇。 如果您選擇第二個選項,並且選擇不踢出允許用戶在不提供密碼的情況下登錄的cookie和會話,那也可以...更改將隨着時間的流逝而發生。 而且沒有人會注意到這一變化。

您已經通過SHA1運行了它們-原始密碼已被破壞,並且無法通過任何實際方法恢復。 您可以嘗試查找另一個產生相同SHA1的字符串,但這要花很多功夫。

暫無
暫無

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

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