PHP函數(shù)crypt()的功能介紹
我們知道在PHP中有實現(xiàn)數(shù)據(jù)加密的功能,我們今天將為大家介紹的是其中一個可以實現(xiàn)數(shù)據(jù)加密功能的函數(shù)——PHP函數(shù)crypt()。 作為PHP函數(shù)crypt()的一個例子,考慮這樣一種情況,你希望創(chuàng)建一段PHP腳本程序限 制對一個目錄的訪問,只允許能夠提供正確的用戶名和口令的用戶訪問這一目錄。
我將把資料存儲在我喜歡的數(shù)據(jù)庫MySQL的一個表中。下面我 們以創(chuàng)建這個被稱作members的表開始我們的例子:
- mysql>CREATE TABLE members (
- ->username CHAR(14) NOT NULL,
- ->password CHAR(32) NOT NULL,
- ->PRIMARY KEY(username)
- ->);
#t#然后,我們假定下面的數(shù)據(jù)已經(jīng)存儲在該表中:
用戶名 密碼
clark keloD1C377lKE
bruce ba1T7vnz9AWgk
peter paLUvRWsRLZ4U
PHP函數(shù)crypt()中的這些加密的口令對應(yīng)的明碼分別是kent、banner和parker。注意一下每個口令的前二個字母, 這是因為我使用了下面的代碼,根據(jù)口令的前二個字母創(chuàng)建干擾串的:
- $enteredPassword.
- $salt = substr($enteredPassword, 0, 2);
- $userPswd = crypt($enteredPassword, $salt);
- // $userPswd然后就和用戶名一起存儲在MySQL 中
我將使用Apache的口令-應(yīng)答認(rèn)證配置提示用戶輸入用戶名和口令,一個鮮為人知的有關(guān)PHP的信息是,它可以把Apache 的口令-應(yīng)答系統(tǒng)輸入的用戶名和口令識別為$PHP_AUTH_USER和$PHP_AUTH_PW,我將在身份驗證腳本中用到這二個變量?;ㄒ恍r間仔細(xì)閱讀下 面的腳本,多注意一下其中的解釋,以便更好地理解下面的代碼:
PHP函數(shù)crypt()和Apache的口令-應(yīng)答驗證系統(tǒng)的應(yīng)用
- < ?php
- $host = "localhost";
- $user = "zorro";
- $pswd = "hell odolly";
- $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;
- ?>
上面就是一個核實用戶訪問權(quán)限的簡單身份驗證系統(tǒng)。在使用PHP函數(shù)crypt()保護(hù)重要的機(jī)密資料時,記住在缺省狀態(tài)下使用的PHP函數(shù)crypt()并不是最安全的,只能用在對安全性要求較低的系統(tǒng)中,如果需要較高的安全性能,就需要我在本篇文章的后面介紹的算法。