本文小編為大家詳細(xì)介紹“php的加密技術(shù)有哪些”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“php的加密技術(shù)有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。
創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的墨江網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
單向散列加密就是把任意長(zhǎng)的輸入消息串變化成固定長(zhǎng)的輸出串且由輸出串難以得到輸入串的一種加密算法。
常見單向散列函數(shù):
MD5 (Message Digest Algorithm 5)
SHA (Secure Hash Algorithm)
MAC (Message Authentication Code)
CRC (Cyclic Redundancy Check)
利用單項(xiàng)散列加密的這個(gè)特性,可以進(jìn)行密碼加密保存。
PHP 處理密碼的幾種方式
MD5(不推薦)
$password = md5($_POST["password"]);
原因:加密算法比較簡(jiǎn)單,而且很多破解密碼的站點(diǎn)都存放了大量的經(jīng)過MD5加密的密碼字符串。
SHA256 和 SHA512(不推薦)
$password = hash("sha256", $password);
原因:加密算法比較簡(jiǎn)單。
鹽值(額外字符串)(常用)
解釋:在加密的過程中,新增了一個(gè)字符串。
Bcrypt (比較安全)
$strSalt = '2f9c8d7h7g7f8d9k'; $salt = '$2y$11$' . $strSalt; echo crypt($password, $salt);
解釋:salt 參數(shù)是可選的。然而,如果沒有salt的話,crypt()創(chuàng)建出來的會(huì)是弱密碼。
password_hash (安全)
//支持版本 (PHP 5 >= 5.5.0, PHP 7) echo password_hash($password, PASSWORD_DEFAULT);
解釋:password_hash() 使用足夠強(qiáng)度的單向散列算法創(chuàng)建密碼的哈希(hash)。
PHP函數(shù):http://php.net/manual/zh/function.password-hash.php
PHP端驗(yàn)證密碼是否正確?
$password = 'e4r3t2y1u'; $strPwdHash = password_hash($password, PASSWORD_DEFAULT); if (password_verify($password, $strPwdHash)) { //驗(yàn)證成功 } else { //驗(yàn)證失敗 }
對(duì)稱加密
采用單鑰密碼系統(tǒng)的加密方法,同一個(gè)密鑰可以同時(shí)用作信息的加密和解密,這種加密方法稱為對(duì)稱加密,也稱為單密鑰加密。
優(yōu)點(diǎn):對(duì)稱加密算法的優(yōu)點(diǎn)是算法公開、計(jì)算量小、加密速度快、加密效率高。
缺點(diǎn):在數(shù)據(jù)傳送前,發(fā)送方和接收方必須商定好秘鑰,雙方必須保存好秘鑰。
常用算法:
DES
AES
PHP 相關(guān)類庫(kù),網(wǎng)上都能找到。
非對(duì)稱加密
非對(duì)稱加密算法需要兩個(gè)密鑰來進(jìn)行加密和解密,這兩個(gè)秘鑰是公開密鑰(public key,簡(jiǎn)稱公鑰)和私有密鑰(private key,簡(jiǎn)稱私鑰)。
請(qǐng)查看歷史文章:PHP 使用非對(duì)稱加密算法 (RSA)
密鑰安全管理
上面說到的這幾種加密技術(shù),能夠達(dá)到安全保密效果的一種重要前提就是密鑰的安全。
在實(shí)際工作中,我們有開發(fā)環(huán)境,預(yù)發(fā)布環(huán)境,正式環(huán)境,每個(gè)環(huán)境中的密鑰都不相同。
那么,我們應(yīng)該如何保存密鑰呢?
寫在源碼中(不可?。?。
寫在配置文件中。(大部分這樣干)。
寫在環(huán)境變量中。(大部分這樣干)。
保存在一個(gè)系統(tǒng)中,每次加密、解密都調(diào)取服務(wù)系統(tǒng)(系統(tǒng)開銷大)。
自己寫一個(gè)擴(kuò)展,用PHP調(diào)取自己的擴(kuò)展(維護(hù)成本高)。
讀到這里,這篇“php的加密技術(shù)有哪些”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。