This Domain(Admin5.com) is for Sale:

在PHP中的加密

时间:2007-11-14  来源:收集  作者:TUPS

PHP提供了使用其crypt()函数完成单向加密功能的可能性。 织梦内容管理系统

  stringcrypt(stringinput_string[,stringsalt]) dedecms.com

  其中的input_string参数是需要加密的字符串,第二个可选的salt是一个位字串,它能够影响加密的暗码,进一步地排除被称作预计算攻击的可能性。缺省情况下,PHP使用一个2个字符的DES干扰串,假如你的系统使用的是MD5,它会使用一个12个字符的干扰串。顺便说一下,可以通过执行下面的命令发现系统将要使用的干扰串的长度:
print"Mysystemsaltsizeis:".CRYPT_SALT_LENGTH;
  系统也可能支持其他的加密算法。crypt()支持四种算法,下面是它支持的算法和相应的salt参
数的长度: copyright dedecms

  算法Salt长度
  CRYPT_STD_DES2-character(Default)
  CRYPT_EXT_DES9-character
  CRYPT_MD512-characterbeginningwith$1$
  CRYPT_BLOWFISH16-characterbeginningwith$2$
  用crypt()实现用户身份验证 本文来自织梦

  作为crypt()函数的一个例子,考虑这样一种情况,你希望创建一段PHP脚本程序限制对一个目录的访问,只答应能够提供正确的用户名和口令的用户访问这一目录。我将把资料存储在我喜欢的数据库MySQL的一个表中。下面我们以创建这个被称作members的表开始我们的例子:
mysql>CREATETABLEmembers(
->usernameCHAR(14)NOTNULL,
->passwordCHAR(32)NOTNULL,
->PRIMARYKEY(username)
->);
  然后,我们假定下面的数据已经存储在该表中:
  用户名密码
  clarkkeloD1C377lKE
  bruceba1T7vnz9Awgk
  peterpaLUvRWsRLZ4U

内容来自dedecms

  这些加密的口令对应的明码分别是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的口令-应答验证系统的应用
  <?php 内容来自dedecms

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

织梦内容管理系统

  //SetauthorizationtoFalse
  $authorization=0;
  //Verifythatuserhasenteredusernameandpassword
  if(isset($PHP_AUTH_USER)&&isset($PHP_AUTH_PW)):

织梦好,好织梦

  mysql_pconnect($host,$user,$pswd)ordie("Can'tconnecttoMySQL server!");

内容来自dedecms

  mysql_select_db($db)ordie("Can'tselectdatabase!"); copyright dedecms

  //Performtheencryption
  $salt=substr($PHP_AUTH_PW,0,2);
  $encrypted_pswd=crypt($PHP_AUTH_PW,$salt);
  //Buildthequery

内容来自dedecms

  $query="SELECTusernameFROMmembersWHERE
  username='$PHP_AUTH_USER'AND
  password='$encrypted_pswd'";
  //Executethequery
  if(mysql_numrows(mysql_query($query))==1):
  $authorization=1;
  endif;
  endif; 织梦内容管理系统

  //confirmauthorization
  if(!$authorization):
  header('WWW-Authenticate:Basicrealm="Private"');
  header('HTTP/1.0401Unauthorized');

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

推荐信息

24小时热门信息