PHP中的MD5加密

http://tech.ddvip.com   2007年08月26日    社区交流

内容摘要:PHP提供了crypt()函数完成加密功能,本文介绍PHP中的MD5加密

   CRYPT_MD5 12-character beginning with $1$

   CRYPT_BLOWFISH 16-character beginning with $2$   

   怎样将PHP的数据加密功能应用于用户验证?   

   我们用crypt()实现用户身份验证。比如我们用一段PHP程序限制对一个目录的访问,只允许注册用户访问这一目录。我们把资料存储MySQL数据库的一个表(这个数据表名为members)中:   

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

   然后,我们可以输入用户的数据到该表中:   

   用户名 密码

   Tom keloD1C377lKE

   John ba1T7vnz9AWgk

   Bill paLUvRWsRLZ4U   

   这些加密的口令对应的明码分别是Tom、John和Bill。我们将根据口令的前二个字母创建干扰串:

   $enteredPassword.

   $salt = substr($enteredPassword, 0, 2);

   $userPswd = crypt($enteredPassword, $salt);   

   // $userPswd然后就和用户名一起存储在MySQL 中   

   crypt()和Apache的口令-应答验证系统的应用  

   <?php
   $host = "localhost"; //主机
   $username = "Tom"; //用户名
   $passwd = "Hello world"; //密码
   $db = "users"; //数据库名   
   // 设置是否通过验证标志,默认为否
   $authorization = 0;   
   // 提示用户输入帐号和密码   
   if (isset($PHP_AUTH_USER) && isset($PHP_AUTH_PW)){
   mysql_pconnect($host, $username, $passwd) or die("不能连接到MySQL服务器!");
   mysql_select_db($db) or die("不能选择数据库!");   
   // 进行加密
   $salt = substr($PHP_AUTH_PW, 0, 2);
   $encrypted_pswd = crypt($PHP_AUTH_PW, $salt);   
   //SQL查询语句
   $query = "SELECT username FROM members WHERE username = '$PHP_AUTH_USER' AND password = '$encrypted_pswd'";   
   // 执行查询
   if (mysql_numrows(mysql_query($query)) == 1) {
   $authorization = 1;
   }
   }   
   if (! $authorization){
   header('WWW-Authenticate: Basic realm="用户验证"');
   header('HTTP/1.0 401 Unauthorized');
   print "无法通过验证";
   exit;
   }else {
   print "已经加密";
   }
   ?>

责编:豆豆技术应用

正在加载评论...