PHP密碼處理

作者:燁竹

加密規(guī)則

  • 絕不要以明文存儲(chǔ)密碼,永遠(yuǎn)使用 哈希算法 來(lái)處理密碼

  • 絕不要使用 Base64 或其他編碼方式來(lái)存儲(chǔ)密碼秸谢,

    這和以明文存儲(chǔ)密碼是一樣的凛澎,使用 哈希 ,而不要使用 編碼

    編碼以及加密估蹄,都是雙向的過(guò)程塑煎,而密碼是保密的,應(yīng)該只被它的所有者知道元媚, 這個(gè)過(guò)程必須是單向的轧叽;哈希正是用于做這個(gè)的苗沧,從來(lái)沒(méi)有解哈希這種說(shuō)法, 但是編碼就存在解碼炭晒,加密就存在解密待逞;

  • 絕不要使用弱哈希或已被破解的哈希算法网严,像 MD5 或 SHA1

    這些算法太老了识樱,而且被證明存在缺陷,它們一開(kāi)始就并不是為了保存密碼而設(shè)計(jì)的震束,另外怜庸,絕不要自己發(fā)明算法

    只使用強(qiáng)密碼哈希算法,例如 BCrypt 垢村,在 PHP 自己的 密碼哈希 函數(shù)中也是使用它

  • 絕不要以明文形式顯示或發(fā)送密碼

    即使是對(duì)密碼的所有者也應(yīng)該這樣割疾。如果你需要 "忘記密碼" 的功能,可以隨機(jī)生成一個(gè)新的 一次性的(這點(diǎn)很重要)密碼嘉栓,然后把這個(gè)密碼發(fā)送給用戶(hù)

  • 絕不要對(duì)用戶(hù)的密碼做一些沒(méi)必要的限制

    如果你使用除 BCrypt(它有最多 72 字符的限制)之外的其他哈希算法宏榕,你應(yīng)該設(shè)置一個(gè)相對(duì)長(zhǎng)一點(diǎn)的密碼長(zhǎng)度(例如 1024 字符),這樣可以緩解 DoS 攻擊

加密方式

MD5

$password = md5($_POST["password"]);

SHA256 和 SHA512

$password = hash("sha256", $password);

鹽值;;對(duì)侵佃,我們?cè)诩用艿臅r(shí)候其實(shí)會(huì)給加密的字符串添加一個(gè)額外的字符串麻昼,以達(dá)到提高一定安全的目的:
<?php

function generateHashWithSalt($password) {
    $intermediateSalt = md5(uniqid(rand(), true));
    $salt = substr($intermediateSalt, 0, 6);
    return hash("sha256", $password . $salt);
}

Bcrypt;;Bcrypt 其實(shí)就是Blowfish和crypt()函數(shù)的結(jié)合,我們這里通過(guò)CRYPT_BLOWFISH判斷Blowfish是否可用馋辈,然后像上面一樣生成一個(gè)鹽值抚芦,不過(guò)這里需要注意的是,crypt()的鹽值必須以$2a$或者$2y$開(kāi)頭
資料:http://php.net/manual/en/function.crypt.php

<?php
function generateHash($password) {
    if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {
        $salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);
        return crypt($password, $salt);
    }
}

Password Hashing API

password_hash() – 對(duì)密碼加密.
password_verify() – 驗(yàn)證已經(jīng)加密的密碼迈螟,檢驗(yàn)其hash字串是否一致.
password_needs_rehash() – 給密碼重新加密.
password_get_info() – 返回加密算法的名稱(chēng)和一些相關(guān)信息.

$hash = password_hash($passwod, PASSWORD_DEFAULT);

這里使用password_hash()你完全可以不提供鹽值(salt)和 消耗值 (cost)叉抡,你可以將后者理解為一種性能的消耗值,cost越大井联,加密算法越復(fù)雜卜壕,消耗的內(nèi)存也就越大。當(dāng)然烙常,如果你需要指定對(duì)應(yīng)的鹽值和消耗值,你可以這樣寫(xiě):

<?php
$options = [
    'salt' => custom_function_for_salt(),
     //write your own code to generate a suitable salt
    'cost' => 12 // the default cost is 10
];
$hash = password_hash($password, PASSWORD_DEFAULT, $options);

密碼加密過(guò)后鹤盒,驗(yàn)證密碼是否正確:

<?php
if (password_verify($password, $hash)) {
    // Pass
}
else {
    // Invalid
}

更改加密方式蚕脏,更換鹽值或者提高消耗值

<?php
if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])) {
    // cost change to 12
    $hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
 
    // don't forget to store the new hash!
}

password_get_info()查看加密信息

algo – 算法實(shí)例
algoName – 算法名字
options – 加密時(shí)候的可選參數(shù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市侦锯,隨后出現(xiàn)的幾起案子驼鞭,更是在濱河造成了極大的恐慌,老刑警劉巖尺碰,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挣棕,死亡現(xiàn)場(chǎng)離奇詭異译隘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)洛心,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén)固耘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人词身,你說(shuō)我怎么就攤上這事厅目。” “怎么了法严?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵损敷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我深啤,道長(zhǎng)拗馒,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任溯街,我火速辦了婚禮诱桂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘苫幢。我一直安慰自己访诱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布韩肝。 她就那樣靜靜地躺著触菜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哀峻。 梳的紋絲不亂的頭發(fā)上涡相,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音剩蟀,去河邊找鬼催蝗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛育特,可吹牛的內(nèi)容都是我干的丙号。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼缰冤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼犬缨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起棉浸,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤怀薛,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后迷郑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體枝恋,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡创倔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了焚碌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畦攘。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖呐能,靈堂內(nèi)的尸體忽然破棺而出念搬,到底是詐尸還是另有隱情,我是刑警寧澤摆出,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布朗徊,位于F島的核電站,受9級(jí)特大地震影響偎漫,放射性物質(zhì)發(fā)生泄漏爷恳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一象踊、第九天 我趴在偏房一處隱蔽的房頂上張望温亲。 院中可真熱鬧,春花似錦杯矩、人聲如沸栈虚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)魂务。三九已至,卻和暖如春泌射,著一層夾襖步出監(jiān)牢的瞬間粘姜,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工熔酷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留孤紧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓拒秘,卻偏偏與公主長(zhǎng)得像号显,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子躺酒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容