background image

作为 crypt()函数的一个例子,考虑这样一种情况,你希望创建一段 PHP

 

脚本程序限 制对

一个目录的访问,只允许能够提供正确的用户名和口令的用户访问这一目录。我将把资料
存储在我喜欢的数据库 MySQL 的一个表中。

 

下面我 们以创建这个被称作 members

 

的表开始我们的例子:

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

 

然后,我们假定下面的数据已经存储在该表中:

 

 

用户名 密码
clark keloD1C377lKE 
bruce ba1T7vnz9AWgk 
peter paLUvRWsRLZ4U 
这些加密的口令对应的明码分别是 kent、banner 和 parker。注意一下每个口令的前二个字母,
 

 

这是因为我使用了下面的代码,根据口令的前二个字母创建干扰串的:

$enteredPassword. 
$salt = substr($enteredPassword, 0, 2); 
$userPswd = crypt($enteredPassword, $salt); 
// $userPswd 然后就和用户名一起存储在 MySQL 

 

我将使用 Apache 的口令-应答认证配置提示用户输入用户名和口令,一个鲜为人知的有
关 PHP 的信息是,它可以把 Apache 的口令-应答系统输入的用户名和口令识别为
$PHP_AUTH_USER 和$PHP_AUTH_PW,我将在身份验证脚本中用到这二个变量。花一些

 

 

时间仔细阅读下 面的脚本,多注意一下其中的解释,以便更好地理解下面的代码:
crypt()和 Apache 的口令-

 

应答验证系统的应用

$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