PHP安全編程之加密功能
數(shù)據(jù)加密在我們生活中的地位已經(jīng)越來越重要了,尤其是考慮到在網(wǎng)絡(luò)上發(fā)生的大量交易和傳輸?shù)拇罅繑?shù)據(jù)。如果對(duì)于采用安全措施有興趣的話,也一定會(huì)有興趣了解PHP(PHP培訓(xùn) php教程 )提供的一系列安全功能。在文章中,宇塵網(wǎng)絡(luò)將介紹這些功能,提供一些基本的用法,以便你能夠?yàn)樽约旱膽?yīng)用軟件中增加安全功能。
預(yù)備知識(shí)
在詳細(xì)介紹PHP的安全功能之前,我們需要花點(diǎn)時(shí)間來向沒有接觸過這方面內(nèi)容的讀者介紹一些有關(guān)密碼學(xué)的基本知識(shí),如果對(duì)密碼學(xué)的基本概念已經(jīng)非常熟悉,就可以跳過去這一部分。
密碼學(xué)可以通俗地被描述為對(duì)加/解密的研究和實(shí)驗(yàn),加密是將易懂的資料轉(zhuǎn)換為不易懂資料的過程,解密則是將不易懂的資料轉(zhuǎn)換為原來易懂資料的過程。不易懂的資料被稱作密碼,易懂的資料被稱作明碼。
數(shù)據(jù)的加/解密都需要一定的算法,這些算法可以非常地簡(jiǎn)單,如著名的凱撒碼,但當(dāng)前的加密算法要相對(duì)復(fù)雜得多,其中一些利用現(xiàn)有的方法甚至是無法破譯的。
PHP的加密功能
只要有一點(diǎn)使用非Windows平臺(tái)經(jīng)驗(yàn)的人可能對(duì)crypt()也相當(dāng)熟悉,這一函數(shù)完成被稱作單向加密的功能,它可以加密一些明碼,但不能夠?qū)⒚艽a轉(zhuǎn)換為原來的明碼。盡管從表面上來看這似乎是一個(gè)沒有什么用處的功能,但它的確被廣泛用來保證系統(tǒng)密碼的完整性。因?yàn),單向加密的口令一旦落入第三方人的手里,由于不能被還原為明文,因此也沒有什么大用處。在驗(yàn)證用戶輸入的口令時(shí),用戶的輸入采用的也是單向算法,如果輸入與存儲(chǔ)的經(jīng)加密后的口令相匹配,則輸入的口信一定是正確的。
PHP同樣提供了使用其crypt()函數(shù)完成單向加密功能的可能性。我將在這里簡(jiǎn)要地介紹該函數(shù):
string crypt (string input_string [, string salt])
其中的input_string參數(shù)是需要加密的字符串,第二個(gè)可選的salt是一個(gè)位字串,它能夠影響加密的暗碼,進(jìn)一步地排除被稱作預(yù)計(jì)算攻擊的可能性。缺省情況下,PHP使用一個(gè)2個(gè)字符的DES干擾串,如果你的系統(tǒng)使用的是MD5(我將在以后介紹MD5算法),它會(huì)使用一個(gè)12個(gè)字符的干擾串。順便說一下,可以通過執(zhí)行下面的命令發(fā)現(xiàn)系統(tǒng)將要使用的干擾串的長(zhǎng)度:
print "My system salt size is: ". CRYPT_SALT_LENGTH;
系統(tǒng)也可能支持其他的加密算法。crypt()支持四種算法,下面是它支持的算法和相應(yīng)的salt參數(shù)的長(zhǎng)度:
算法 Salt長(zhǎng)度
CRYPT_STD_DES 2-character (Default)
CRYPT_EXT_DES 9-character
CRYPT_MD5 12-character beginning with 102/td>
CRYPT_BLOWFISH 16-character beginning with 102/td>
更多技術(shù)知識(shí),更多網(wǎng)絡(luò)服務(wù),盡在宇塵網(wǎng)絡(luò)。我們的成長(zhǎng),離不開你們的支持,宇塵網(wǎng)絡(luò),歡迎您的訪問。