首頁  >  文章  >  後端開發  >  php註冊產生密碼疑問

php註冊產生密碼疑問

WBOY
WBOY原創
2016-09-05 08:59:531506瀏覽

為什麼在建用戶表的時候一般都會加個salt字段,然後計算password的時候,會根據註冊頁面輸入的密碼和隨機生成的salt值一起做MD5加密,這樣做有什麼好處啊,大神們給個詳細的解釋。

回覆內容:

為什麼在建用戶表的時候一般都會加個salt字段,然後計算password的時候,會根據註冊頁面輸入的密碼和隨機生成的salt值一起做MD5加密,這樣做有什麼好處啊,大神們給個詳細的解釋。

經過MD5加密的弱密碼仍可透過窮舉或彩虹表破解,加鹽是為了增加MD5破解難度從而提高安全性。

主要是為了避免資料庫被竊取後,直接取得使用者的密碼明文.

PHP密碼雜湊安全
密碼雜湊相關函數:
password_hash(推薦) crypt(blowfish) hash sha1 md5
hash函數支援多種雜湊演算法hash_algos,例如sha512.

PHP 5.5開始提供了一個原生密碼雜湊API(password_hash/password_verify),
它提供一個安全的方式來完成密碼散列和驗證.
PHP 5.3.7及後續版本中提供了一個純PHP的原生密碼雜湊API的相容函式庫.
當PHP版本不支援password_hash/password_verify時,改用crypt實作.
如果使用crypt()函式來進行密碼驗證,那麼你需要選擇一種耗時恆定的字串比較演算法來避免時序攻擊.
耗時恆定就是字串比較所消耗的時間恆定,不隨輸入資料的多少變化而變化.
PHP中的=====操作符和strcmp()
===操作符和strcmp()

===

操作符和
strcmp()

===
操作符和
strcmp()

函數都不是耗時恆定的字串比較,

但是
password_verify()
可以幫你完成這項工作.
所以我們鼓勵你盡可能的使用原生密碼散列API.

加解密領域中的"鹽"是指在進行散列處理的過程中加入的一些數據,
用來避免從已計算的散列值表(被稱作"彩虹表")中對比輸出數據從而取得明文密碼的風險.
簡單而言,"鹽"就是為了提高散列值被破解的難度而加入的少量數據.

現在有很多在線服務都能夠提供計算後的散列值以及其對應的原始輸入的清單,並且資料量極為龐大.

透過加"鹽"就可以避免直接從清單中查找到對應明文的風險.

彩虹表是一個用於加密散列函數逆運算的預先計算好的表,常用於破解加密過的密碼雜湊.

password_hash()函數會隨機產生"鹽".

當使用password_hash()或者crypt()函數時,"鹽"會被作為生成的散列值的一部分返回.

你可以直接把完整的返回值存儲到資料庫中,因為這個回傳值中已經包含了足夠的資訊.

可以直接用在password_verify()或crypt()函數來進行密碼驗證.🎜 🎜鹽還有個用處就是可以用來做識別用戶身份的cookie,🎜比如基於數據庫實現一套自定義的cookie會話機制:🎜這個cookie既要做到認證用戶,又要做到不能被偽造和破解.🎜
<code>//保护用户密码的盐
$salt = sha1( uniqid(getmypid().'_'.mt_rand().'_', true) );

//数据库保存的用户密码($pwd_user是用户输入的密码明文)
$pwd_db = sha1($salt.sha1($pwd_user));

//cookie里的盐
//其中$global_salt是配置里定义的全局盐,用来保护用户的盐,一旦修改,所有用户的cookie都将失效.
$cookie_salt = sha1($global_salt.sha1($salt));

//最终生成的cookie内容
$cookie = base64_encode($user_id.'|'.$cookie_salt);
//如果你需要高安全性,还可以使用MCRYPT_BLOWFISH对整个cookie的内容做一次加密.
$cookie = mcrypt_blowfish($cookie, $key);

//设置cookie,这里把过期时间设为604800秒(60*60*24*7,一周)
setcookie('sessid', $cookie, time()+604800, '/', '', false, true);

//解密cookie
$cookie = mdecrypt_blowfish($_COOKIE['sessid'], $key);

//解码分割后拿到里面的$user_id和$cookie_salt
$cookie = explode('|', base64_decode($_COOKIE['sessid']));
list($user_id, $cookie_salt) = $cookie;</code>
🎜 🎜用 bcrypt 吧,PHP 5.5.0 預設演算法了都。 🎜咋還 md5 呢? 🎜 🎜 🎜http://zhuanlan.zhihu.com/p/2...🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn