2015-05-24 26 views
0

在php上。我們如何使用md5加密方法?假設一個登錄表單。當我們想要一個加密的文本,我們使用
使用md5函數

$encryptedtxt=md5('text'); 

然後我們發送此$ encryptedtxt數據庫。現在,如果我們希望將$ encryptedtxt與用戶登錄的新輸入進行比較,我們應該怎麼做?如果我們應該從它的加密形式返回文本,怎麼樣? TNX。

+2

* 「?我們該怎麼辦」 * - 如果這是密碼,答案很簡單; **不要使用它**。它已經30歲了,不再安全使用了。另外,可以在網上找到「如何做」的內容。告訴我們你的嘗試。 –

+0

Tnx! @ Fred-ii-是否還有其他方法可以保證密碼的安全性? – Sonoo

+3

對於密碼存儲,請使用[** CRYPT_BLOWFISH **](http://security.stackexchange.com/q/36471)或PHP 5.5的['password_hash()'](http://www.php.net) /manual/en/function.password-hash.php)函數。對於PHP <5.5,使用['password_hash()兼容包]](https://github.com/ircmaxell/password_compat)。 –

回答

3

MD5不再被認爲可以安全地用於密碼散列,它已經30歲了,被認爲是「破」的。

使用現代方法,包括準備好的陳述。

以下是你可以在閱讀了幾篇文章:


從ircmaxell的回答https://stackoverflow.com/a/29778421/

拉到只需使用一個圖書館。認真。他們的存在是有原因的。

自己不要去做。如果你正在創建自己的鹽,你做錯了。你應該使用一個庫來處理你的問題

$dbh = new PDO(...); 

$username = $_POST["username"]; 
$email = $_POST["email"]; 
$password = $_POST["password"]; 
$hash = password_hash($password, PASSWORD_DEFAULT); 

$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?"); 
$stmt->execute([$username, $email, $hash]); 

並會在登錄:

$sql = "SELECT * FROM users WHERE username = ?"; 
$stmt = $dbh->prepare($sql); 
$result = $stmt->execute([$_POST['username']]); 
$users = $result->fetchAll(); 
if (isset($users[0]) { 
    if (password_verify($_POST['password'], $users[0]->password) { 
     // valid login 
    } else { 
     // invalid password 
    } 
} else { 
    // invalid username 
} 
+1

或者你可以製造爲騙局:-) –

+1

@Dagon肯定,但給了下面的其他答案,我不得不給他們一個「安全」的方法。 OP可以用它做他們想做的事;是否關閉問題。;-) –

+0

哦,我們知道你只是想簡單的代表點:-) –