2011-08-15 89 views
0

嘿傢伙我試圖讓它使用MD5加密密碼登錄系統。我有加密工作,所有這只是由於某種原因,當我輸入密碼「帕」進入登錄頁面,點擊登錄按鈕我做到了給我發來一個網頁,它告訴我使用「帕」是加密的密碼和密碼爲「 - 帕爾默在使用密碼4844fd4088ef5278ad18f892808ebda8鄧肯已記錄」輸出這一點。加密時數據庫中的密碼是「4669a6b46c8d891b373cfcd664dff6」。爲什麼這兩個密碼不同?我使用的是相同的鹽(鹽是「a123b123」MD5鹽登錄系統

下面是我的代碼,在寄存器加密密碼:。

$password = $_POST['password']; 

$md5pass = md5($salt.md5($password)); 

下面是我的登錄代碼

<?php 
session_start(); 
include('config/config.php'); 

$email = $_POST['email']; 
$password = $_POST['password']; 
$pass2 = md5($salt.md5($password)); 

$check = mysql_query("SELECT `email`,`password` FROM user WHERE (`email`='$email' AND  `password`='$pass2')") or die(mysql_error()); 

$count = mysql_num_rows($check); 

//if($count == 1) { 
$_SESSION['user'] = strtoupper($user); 
//header('Location: /panel/index.php'); 
echo("Duncan Logged in using password $pass2 - $pass"); 
//} else { 
//$_SESSION['errormsg'] = "<div id='error'><strong>Error:</strong> Invalid Username or Password!</div>"; 
//header('Location: index.php'); 
//} 
?> 
+0

「我試圖讓它使用MD5加密密碼登錄系統」 - MD5壞了:你知道嗎? –

+0

你的意思是什麼壞了? –

+0

請逃不過你的'$ _POST'輸入,你把他們在您的查詢,沒有點在具有登錄,如果是微不足道的旁路。 – Dunhamzzz

回答

7

你有存儲你的鹽 - 請使用隨機鹽,這樣,兩個具有相同密碼的用戶將獲得不同的摘要! - 某處供以後使用:

$salt = sha1(getRandomSalt()); 
$digest = sha1($password.$salt).'$'.$salt; // use sha1 instead of md5 

以後你可以用相同的鹽檢查所提供的密碼:

list($stored_pw, $stored_salt) = explode('$', $stored_digest); 
if($stored_pw == sha1($user_provided_pw.$stored_salt)) { 
    echo 'user provided correct password'; 
} 
2

從上面knittl的解決方案只是一個小注釋:

您需要通過

if($stored_pw == sha1($user_provided_pw.$stored_salt)) { 

更換線

if($stored_pw = sha1($user_provided_pw.$stored_salt)) { 

得到它的工作。

(我試着將它添加到knittl的帖子,但它說的編輯需要至少6個字符)