作为 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