2015-07-12 77 views
0

我一直在網上閱讀很多MD5不是很安全的,我決定將我的網站切換到使用SHA512,我從來沒有這樣做過,所以我只是問你要檢查我是否正確地做了它,或者是否有其他更安全的散列方法,我可以使用它來存儲密碼?使用SHA512來存儲登錄密碼而不是MD5

$ upass是我需要散列的用戶密碼。

這裏是我的原始PHP與MD5:

$uname = mysql_real_escape_string($_POST['uname']); 
$sname = mysql_real_escape_string($_POST['sname']); 
$email = mysql_real_escape_string($_POST['email']); 
$upass = md5(mysql_real_escape_string($_POST['pass'])); 

這是我的新的PHP使用SHA:

$uname = mysql_real_escape_string($_POST['uname']); 
$sname = mysql_real_escape_string($_POST['sname']); 
$email = mysql_real_escape_string($_POST['email']); 
$upass = mysql_real_escape_string($_POST['pass']); 

$upass = hash('SHA512', $upass); 

這裏同時單詞「密碼」散列字符串,以確保公正哈希正在工作。

SHA512:

b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e

MD5:

5f4dcc3b5aa765d61d8327deb882cf99

感謝提前任何幫助/諮詢。

+1

當您修復/更新代碼以使用「良好的現代實踐」時,還可以使用佔位符/參數化查詢以及mysqli或PDO。 – user2864740

+1

MD5和SHA512都不是加密密碼,而是加密散列函數。這是一個巨大的差異:散列函數在加密時(即解密)沒有反向操作。 – Gumbo

回答

5

正確的方法是使用password_hash使用PASSWORD_DEFAULT作爲算法。這樣一來,你將擁有一個很好的算法(如果你的PHP5.5是bcrypt),在未來版本的PHP中可以自動升級到更好的算法,而無需更改代碼。密碼也用鹽進行散列。

+0

聽起來不錯,我不熟悉password_hash,請你編輯我的代碼以適應它嗎? –

+1

在你的代碼中,它幾乎可以代替'hash'。除了哈希之外,當然你還需要檢查。這是通過['password_verify']完成的(http://php.net/manual/en/function.password-verify.php)。文檔頁面包含幫助您入門的示例。 – GolezTrol

+0

非常感謝你,我剛剛補充說,有沒有辦法改變成本? –