2013-05-19 26 views
2

我有一個註冊頁面,允許用戶所以我需要散列它成爲數據庫中的這項工作很好使用隱窩上登錄其顯示不正確的通

但是當更安全插入密碼不起作用哈希密碼它來登錄輸入的密碼不匹配寄存器一個如何解決這個問題problemmm

這是我第一次使用哈希所以我想

這沒有工作是註冊碼hash:

//ADD MD5 hash to the password 
function cryptPass($input, $rounds = 9) 
{ 
    $salt = ""; 
    $saltChars = array_merge(range('A','Z'), range('a','z'), range('0','9')); 
    for($i = 0; $i<22; $i++) 
    { 
     $salt .=$saltChars[array_rand($saltChars)]; 
    } 
    return crypt($input, sprintf('$2y$%02d$test$', $rounds) . $salt); 
} 
$hashedpass = cryptPass($pass1);  
echo $hashedpass; 

散列密碼= $ 2Y $ 09 $測試$ 5I9x8HWhA4UHi5TMu.AxfdWvZadDCE.LD6HCkrK3ZsqJeN7e

這是哈希登錄代碼:

function cryptPass($input, $rounds = 9) 
{ 
    $salt = ""; 
    $saltChars = array_merge(range('A','Z'), range('a','z'), range('0','9')); 
    for($i = 0; $i<22; $i++) 
    { 
     $salt .=$saltChars[array_rand($saltChars)]; 
    } 
    return crypt($input, sprintf('$2y$%02d$test$', $rounds) . $salt); 
} 
$hashedpass = cryptPass($pass); 
echo $hashedpass; 

散列密碼= $ 2Y $ 09 $測試$ 4ZGgCiXdKzgQvuzwu.AxfdWvZadDCE.LD6HCkrK3ZsqJeN7e

+0

將您爲每個用戶生成的鹽存儲在數據庫中,並檢索該鹽,而不是創建一個新鹽。 – Patashu

+0

任何人都可以幫助我?我真的需要它的工作 – user2398286

+0

你有幾個答案,甚至是正確的。你只需要理解和應用它們。 – deceze

回答

0

如果我正確理解了您的代碼,登錄時代碼就會生成一種新的salt,而忽略與passwo一起存儲的代碼RD。使用不同的salt來散列相同的密碼會產生不同的散列。

要麼使用 不變鹽 pepper (scroll to the bottom of this answer),按@ C2的回答是:

function cryptPass($input, $rounds = 9) 
{ 
    return crypt($input, sprintf('$2y$%02d$mysalt$', $rounds)); 
} 
$hash = cryptPass($pass); 

或者使用相同的鹽兩次:

// Login time (register-time code is unchanged) 
function cryptPass($input, $salt, $rounds = 9) 
{ 
    return crypt($input, sprintf('$2y$%02d$%s$', $rounds, $salt)); 
} 
function checkPass($freshPass, $hashFromDatabase) { 
    $salt = explode('$', $hashfromDatabase, 5); 
    $salt = $salt[3]; 
    return cryptPass($freshPass, $salt) === $hashFromDatabase; 
} 
+0

所以如果我理解你在登錄密碼='$ hashFromDatabase'的查詢中正確? – user2398286

+0

先生$ mysalt $可以是什麼? – user2398286

+0

我需要一個關於我的代碼的例子,因爲我不知道如何在登錄中編寫函數來獲得identacal通過遺憾的問題,但它是我第一次使用哈希 – user2398286

1

註冊後您創建一個獨特的鹽。該鹽現在是散列的一部分。如果仔細觀察,您會發現它嵌入在散列的第一部分。要檢查密碼,請使用先前哈希密碼的鹽,以便再次使用相同的鹽。

$correctPasswordHash = getPasswordFromDatabase($_POST['username']); 
$hash = crypt($_POST['password'], $correctPasswordHash); 

if ($correctPasswordHash === $hash) ... 

爲了更方便,更簡單明瞭,使用password_compat library,它包裝這在一個易於使用的API,它也將被集成到PHP的未來版本。檢查其源代碼crypt的正確用法,因爲有一些缺陷需要處理。 password_compat庫也使用自定義二進制比較而不是簡單的===來阻止計時攻擊。

相關問題