加密函數(shù)在PHP中的應(yīng)用

PHP語(yǔ)言廣泛應(yīng)用于WEB互聯(lián)網(wǎng)的開(kāi)發(fā),其豐富的內(nèi)置函數(shù)庫(kù)和良好的移植性在網(wǎng)絡(luò)開(kāi)發(fā)中發(fā)揮了極其重要的作用,加密函數(shù)成功的應(yīng)用于各種PHP程序之中,使相關(guān)數(shù)據(jù)在不安全的信息渠道中得以安全的傳輸,為保證前臺(tái)
的網(wǎng)頁(yè)瀏覽與后臺(tái)的用戶管理安全奠定了基礎(chǔ)。

一、PHP中常見(jiàn)的加密函數(shù)

1、應(yīng)用MD5()函數(shù)加密

該加密算法是一種常用的加密方法。MD5的全稱是Message-Digest Algorithm5,Message-Digest通常指的是字節(jié)串的Hash變換,即為把一個(gè)任意長(zhǎng)度的字節(jié)串轉(zhuǎn)換為一定長(zhǎng)度的整數(shù)。

MD5將任意長(zhǎng)度的字節(jié)串變換成一個(gè)128位的大整數(shù),并且是一種不可逆的轉(zhuǎn)換算法,即使我們看到了源程序和算法描述,也無(wú)法將一個(gè)MD5的值變回原來(lái)的字符串,從而保證了原始數(shù)據(jù)的安全。MD50函數(shù)用來(lái)計(jì)算字符串的MD5混合值。其語(yǔ)法為:

String md5(sting str);用md50函數(shù)獲取字符串加密后的值,如:

< ?php $str=”abc”; $mstr=md5($str); echo $mstr;//返回字符串加密后的值為“900150983cd24fbOd6963f7d28e17f72" ?>

2、應(yīng)用CRYPTO函數(shù)加密

該函數(shù)將字符串用UNIX的標(biāo)準(zhǔn)加密模塊DES進(jìn)行加密,是單向的加密函數(shù),每次頁(yè)面刷新后產(chǎn)生的密碼值是不同的,無(wú)法解密。

即可以實(shí)現(xiàn)加密一些明碼,但不能將密文重新轉(zhuǎn)換為明碼。其語(yǔ)法為:

String crypt(string str,string [salt]);如果要比對(duì)字符串,將已加密的字符串的頭兩個(gè)字符放在salt的參數(shù)中,再比對(duì)加密后的字符串。其中,參數(shù)str是要被加密的明碼,參數(shù)salt是可選的一個(gè)位字串,能夠影響到加密的暗碼,進(jìn)一步保證了密碼的安全。通常情況下,PHP使用一個(gè)2個(gè)字符的DES干擾串。如果不使用salt參數(shù),則程序會(huì)自動(dòng)產(chǎn)生干擾串,如:

< ?php $str=”abc"; $mstr=crypt($str); echo$mstr;//返回字符串加密后的值為 "$I$L60.2MI.$WWfXPw/SnRFGtTdnMVVdc.” ?>

二、加密技術(shù)在程序中的應(yīng)用

在常見(jiàn)的WEB網(wǎng)站中,登錄頁(yè)面是必不可少的,用戶登錄的密碼安全性要求自然不低。在以下常見(jiàn)的登錄頁(yè)面設(shè)計(jì)中,通過(guò)MD50,CRYPTO和BASE64編碼的方式對(duì)用戶的密碼進(jìn)行加密處理,著重體現(xiàn)PHP中加密技術(shù)在常見(jiàn)的網(wǎng)絡(luò)程序的具體應(yīng)用。以登錄用戶密碼的加密為例來(lái)分析加密函數(shù)在獲取用戶信息中的加密處理應(yīng)用。

1、通過(guò)crypt0函數(shù)加密

建立displaycrypt.php,其代碼的前半部分通過(guò)post方法獲取用戶的用戶名和密碼信息同displaymd5 .php中的一樣,其后半部分的核心代碼為:

< ?php echo”用戶名:$username”;//輸出用戶名 echo'kbr>";//輸出換行

echo"密碼已經(jīng)過(guò)crypt0函數(shù)加密結(jié)果是:”;

echo”";echo¨

?>再將login.html中form標(biāo)記的action屬性取值為displaycrypt.php,運(yùn)行l(wèi)ogin.html用戶名輸入為“張三”,密碼輸入為“123456”,運(yùn)行結(jié)果則為下圖所示。

1

2、通過(guò)base64編碼加密

建立displaybase64.php,其后半部分的核心代碼為:

< ?php echo”用戶名:$username”;//輸出用戶名 echo'kbr>";//輸出換行

echo'kscript>alert(’密碼已經(jīng)過(guò)base64加密結(jié)果是:

”.base64_encode($userpass).¨’);”;//輸出密碼

(base64加密處理后的結(jié)果)

?>再將login.html中form標(biāo)記的action屬性取值為displaybase64.php,運(yùn)行l(wèi)ogin.html,用戶名輸入為“張三”,密碼輸入為“123456”,運(yùn)行結(jié)果則為下圖所示。

1

三、加密技術(shù)的應(yīng)用比較

總體上來(lái)講,MD5廣泛用于數(shù)據(jù)加密技術(shù)上,在大多數(shù)企業(yè)商業(yè)網(wǎng)站中用戶的密碼的值都是經(jīng)過(guò)MD5的方式加密以后而保存在數(shù)據(jù)庫(kù)中的。而用戶在登錄的過(guò)程中,程序需要把用戶的密碼轉(zhuǎn)換成MD5加密處理以后的值和存儲(chǔ)在原始數(shù)據(jù)庫(kù)的MD5的值進(jìn)行比較,而程序的本身并不關(guān)注用戶的密碼的真實(shí)性,該項(xiàng)技術(shù)尤其是在在線投票系統(tǒng)及企業(yè)的商務(wù)網(wǎng)站中,對(duì)用戶的真實(shí)性身份進(jìn)行加密處理。

在實(shí)際WEB開(kāi)發(fā)的過(guò)程中,通過(guò)CRYPTO函數(shù)對(duì)用戶的密碼等相關(guān)信息進(jìn)行加密也被得以廣泛的應(yīng)用,作為單向加密方式,即使加密口令落入第三方,由于不能被還原成明碼,也不會(huì)影響網(wǎng)站的安全性,該函數(shù)被廣泛應(yīng)用于各類網(wǎng)站的管理員和會(huì)員的登錄模塊中。

BASE64_ ENCODE()和BASE64_- DECODE()函數(shù)用于為相關(guān)數(shù)據(jù)進(jìn)行加密和解密,對(duì)密碼的處理是雙向的,廣泛的應(yīng)用于各種論壇中對(duì)用戶的密碼進(jìn)行BASE64編碼和大量的電子商務(wù)系統(tǒng)中對(duì)顧客的訂單號(hào)進(jìn)行BASE64編碼。

小知識(shí)之Base64

Base64是網(wǎng)絡(luò)上最常見(jiàn)的用于傳輸8Bit字節(jié)代碼的編碼方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的詳細(xì)規(guī)范。