人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

PHP中的加密技巧

PHP中的加密技巧

更新時(shí)間:2022-08-17 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

數(shù)據(jù)加密在我們生活中的地位已經(jīng)越來(lái)越重要了,尤其是考慮到在網(wǎng)絡(luò)上發(fā)生的大量交易和傳輸?shù)拇罅繑?shù)據(jù)。如果對(duì)于采用安全措施有興趣的話(huà),也一定會(huì)有興趣了解PHP提供的一系列安全功能。在本篇文章中,我們將介紹這些功能,提供一些基本的用法,以便你能夠?yàn)樽约旱膽?yīng)用軟件中增加安全功能。 

預(yù)備知識(shí) 
在詳細(xì)介紹PHP的安全功能之前,我們需要花點(diǎn)時(shí)間來(lái)向沒(méi)有接觸過(guò)這方面內(nèi)容的讀者介紹一些有關(guān)密碼學(xué)的基本知識(shí),如果對(duì)密碼學(xué)的基本概念已經(jīng)非常熟悉,就可以跳過(guò)去這一部分。 

密碼學(xué)可以通俗地被描述為對(duì)加/解密的研究和實(shí)驗(yàn),加密是將易懂的資料轉(zhuǎn)換為不易懂資料的過(guò)程,解密則是將不易懂的資料轉(zhuǎn)換為原來(lái)易懂資料的過(guò)程。不易懂的資料被稱(chēng)作密碼,易懂的資料被稱(chēng)作明碼。 

數(shù)據(jù)的加/解密都需要一定的算法,這些算法可以非常地簡(jiǎn)單,如著名的凱撒碼,但當(dāng)前的加密算法要相對(duì)復(fù)雜得多,其中一些利用現(xiàn)有的方法甚至是無(wú)法破譯的。 

PHP的加密功能 
只要有一點(diǎn)使用非Windows平臺(tái)經(jīng)驗(yàn)的人可能對(duì)crypt()也相當(dāng)熟悉,這一函數(shù)完成被稱(chēng)作單向加密的功能,它可以加密一些明碼,但不能夠?qū)⒚艽a轉(zhuǎn)換為原來(lái)的明碼。盡管從表面上來(lái)看這似乎是一個(gè)沒(méi)有什么用處的功能,但它的確被廣泛用來(lái)保證系統(tǒng)密碼的完整性。因?yàn)椋瑔蜗蚣用艿目诹钜坏┞淙氲谌饺说氖掷铮捎诓荒鼙贿原為明文,因此也沒(méi)有什么大用處。在驗(yàn)證用戶(hù)輸入的口令時(shí),用戶(hù)的輸入采用的也是單向算法,如果輸入與存儲(chǔ)的經(jīng)加密后的口令相匹配,則輸入的口信一定是正確的。 

PHP同樣提供了使用其crypt()函數(shù)完成單向加密功能的可能性。我將在這里簡(jiǎn)要地介紹該函數(shù): 

string crypt (string input_string [, string salt]) 
其中的input_string參數(shù)是需要加密的字符串,第二個(gè)可選的salt是一個(gè)位字串,它能夠影響加密的暗碼,進(jìn)一步地排除被稱(chēng)作預(yù)計(jì)算攻擊的可能性。缺省情況下,PHP使用一個(gè)2個(gè)字符的DES干擾串,如果你的系統(tǒng)使用的是MD5(我將在以后介紹MD5算法),它會(huì)使用一個(gè)12個(gè)字符的干擾串。順便說(shuō)一下,可以通過(guò)執(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 $1$ 
CRYPT_BLOWFISH 16-character beginning with $2$ 

用crypt()實(shí)現(xiàn)用戶(hù)身份驗(yàn)證 
作為crypt()函數(shù)的一個(gè)例子,考慮這樣一種情況,你希望創(chuàng)建一段PHP腳本程序限制對(duì)一個(gè)目錄的訪(fǎng)問(wèn),只允許能夠提供正確的用戶(hù)名和口令的用戶(hù)訪(fǎng)問(wèn)這一目錄。我將把資料存儲(chǔ)在我喜歡的數(shù)據(jù)庫(kù)MySQL的一個(gè)表中。下面我們以創(chuàng)建這個(gè)被稱(chēng)作members的表開(kāi)始我們的例子: 

mysql>CREATE TABLE members ( 
->username CHAR(14) NOT NULL, 
->password CHAR(32) NOT NULL, 
->PRIMARY KEY(username) 
->); 

然后,我們假定下面的數(shù)據(jù)已經(jīng)存儲(chǔ)在該表中: 

用戶(hù)名 密碼 
clark keloD1C377lKE 
bruce ba1T7vnz9AWgk 
peter paLUvRWsRLZ4U 

這些加密的口令對(duì)應(yīng)的明碼分別是kent、banner和parker。注意一下每個(gè)口令的前二個(gè)字母,這是因?yàn)槲沂褂昧讼旅娴拇a,根據(jù)口令的前二個(gè)字母創(chuàng)建干擾串的: 

$enteredPassword. 
$salt = substr($enteredPassword, 0, 2); 
$userPswd = crypt($enteredPassword, $salt); 
// $userPswd然后就和用戶(hù)名一起存儲(chǔ)在MySQL中 

我將使用Apache的口令-應(yīng)答認(rèn)證配置提示用戶(hù)輸入用戶(hù)名和口令,一個(gè)鮮為人知的有關(guān)PHP的信息是,它可以把Apache的口令-應(yīng)答系統(tǒng)輸入的用戶(hù)名和口令識(shí)別為$PHP_AUTH_USER和$PHP_AUTH_PW,我將在身份驗(yàn)證腳本中用到這二個(gè)變量。花一些時(shí)間仔細(xì)閱讀下面的腳本,多注意一下其中的解釋?zhuān)员愀玫乩斫庀旅娴拇a: 

crypt()和Apache的口令-應(yīng)答驗(yàn)證系統(tǒng)的應(yīng)用 
<?php 

$host = "localhost"; 
$user = "zorro"; 
$pswd = "hellodolly"; 
$db = "users"; 

// Set authorization to False 

$authorization = 0; 

// Verify that user has entered username and password 

if (isset($PHP_AUTH_USER) && isset($PHP_AUTH_PW)) : 

mysql_pconnect($host, $user, $pswd) or die("Can’t connect to MySQL 
server!"); 

mysql_select_db($db) or die("Can’t select database!"); 

// Perform the encryption 
$salt = substr($PHP_AUTH_PW, 0, 2); 
$encrypted_pswd = crypt($PHP_AUTH_PW, $salt); 

// Build the query 

$query = "SELECT username FROM members WHERE 
username = ’$PHP_AUTH_USER’ AND 
password = ’$encrypted_pswd’"; 

// Execute the query 

if (mysql_numrows(mysql_query($query)) == 1) : 
$authorization = 1; 
endif; 

endif; 

// confirm authorization 

if (! $authorization) : 

header(’WWW-Authenticate: Basic realm="Private"’); 
header(’HTTP/1.0 401 Unauthorized’); 
print "You are unauthorized to enter this area."; 
exit; 

else : 

print "This is the secret data!"; 

endif; 

?> 

上面就是一個(gè)核實(shí)用戶(hù)訪(fǎng)問(wèn)權(quán)限的簡(jiǎn)單身份驗(yàn)證系統(tǒng)。在使用crypt()保護(hù)重要的機(jī)密資料時(shí),記住在缺省狀態(tài)下使用的crypt()并不是最安全的,只能用在對(duì)安全性要求較低的系統(tǒng)中,如果需要較高的安全性能,就需要我在本篇文章的后面介紹的算法。 

下面我將介紹另一個(gè)PHP支持的函數(shù)━━md5(),這一函數(shù)使用MD5散列算法,它有幾種很有趣的用法值得一提: 

混編 
一個(gè)混編函數(shù)可以將一個(gè)可變長(zhǎng)度的信息變換為具有固定長(zhǎng)度被混編過(guò)的輸出,也被稱(chēng)作“信息文摘”。這是十分有用的,因?yàn)橐粋(gè)固定長(zhǎng)度的字符串可以用來(lái)檢查文件的完整性和驗(yàn)證數(shù)字簽名以及用戶(hù)身份驗(yàn)證。由于它適合于PHP,PHP內(nèi)置的md5()混編函數(shù)將把一個(gè)可變長(zhǎng)度的信息轉(zhuǎn)換為128位(32個(gè)字符)的信息文摘。混編的一個(gè)有趣的特點(diǎn)是不能通過(guò)分析混編后的信息得到原來(lái)的明碼,因?yàn)榛炀幒蟮慕Y(jié)果與原來(lái)的明碼內(nèi)容沒(méi)有依賴(lài)關(guān)系。 即便只改變一個(gè)字符串中的一個(gè)字符,也將使得MD5混編算法計(jì)算出二個(gè)截然不同的結(jié)果。

溫馨提示:喜歡本站的話(huà),請(qǐng)收藏一下本站!

本類(lèi)教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 岚皋县| 武川县| 吴桥县| 弥渡县| 新巴尔虎右旗| 华安县| 双柏县| 运城市| 城固县| 崇州市| 罗山县| 临西县| 大埔区| 涟源市| 德安县| 白沙| 曲阜市| 郓城县| 铁岭县| 盐源县| 普宁市| 当雄县| 安义县| 比如县| 崇礼县| 阜宁县| 达州市| 奇台县| 清涧县| 富顺县| 封丘县| 阿拉善左旗| 象州县| 宁乡县| 乐至县| 霍州市| 大埔区| 海宁市| 朔州市| 望谟县| 东明县|