2014-06-20 97 views
-1

對不起,我對英文的使用不好......我在使用哈希函數時發生了問題(第一次使用鹽)。 問題是我不知道如何從函數中真正返回鹽漬/散列密碼。哈希與函數中的鹽

我的代碼:

# Password hashing with a salt. 
function hashing($stringPassword) 
{ 
    // Making a random uniq code as salt. 
    $salt = uniqid(mt_rand(), true); 

    $HASH512 = hash('SHA512', $stringPassword); 
    $hashPassword = $salt.$HASH512; 

    return $stringPassword; 
} 

我如何試圖對它進行測試:

<?php 
$stringPassword = '482301'; 
hashing($stringPassword); 
echo $hashPassword; 
?> 

謝謝你的幫助!

+0

什麼......你在做什麼?你不會從你的函數中返回任何有用的東西,並且你調用該函數時不會將其輸出存儲到任何類型的變量中。請從一個基本的PHP教程開始。 – ceejayoz

+0

你能解釋你遇到的問題嗎?第二個代碼片段應該顯示一串長字符 - 這是不是你所期望的? – Kryten

+0

@Kryten第二個代碼片段不應該顯示任何東西,因爲目前寫入 – ceejayoz

回答

3

你的代碼是向後的。鹽在你散列之前必須是密碼的一部分。然後你需要返回散列密碼和salt,以便稍後進行適當的比較。

function hashing($cleartext) { 
    $salt = uniqid(mt_rand(), true); 
    $hash512 = hash('SHA512', $salt . $cleartext); 
    return(array('hash' => $hash512, 'salt' => $salt)); 
} 

$foo = hashing('letmein'); 
echo "Salt is: $foo[salt]"; 
+0

謝謝!這幫助我並修復了它:-) – RezaM

1

既然你是散列密碼,你應該知道的是,SHA算法*不適合哈希密碼。它們太快了,您需要一個帶有BCrypt或PBKDF2等成本因素的函數,您可以在其中控制計算所需的時間。

PHP提供了一個專用的功能password_hash()產生BCrypt哈希值,爲早期PHP版本,你可以使用compatibility pack

// Hash a new password for storing in the database. 
// The function automatically generates a cryptographically safe salt. 
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT); 

// Check if the hash of the entered login password, matches the stored hash. 
// The salt and the cost factor will be extracted from $existingHashFromDb. 
$isPasswordCorrect = password_verify($password, $existingHashFromDb);