![](/img/trans.png)
[英]How can I rehash my stored passwords which is stored in Database using md5?
[英]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.