灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:4967回复:0

PHP中的MD5如何加密详解

楼主#
更多 发布于:2012-08-24 20:04

密码学是研究编制密码(我们简称为加密:encode)和破译密码(我们称之为解密:decode)的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。通常情况下,人们将可懂的文本称为明文;将明文变换成的不可懂的文本称为密文。把明文变换成密文的过程叫加密;其逆过程,即把密文变换成明文的过程叫解密。
  php中提供了哪些数据加密功能?
  php提供了crypt()函数完成加密功能:
  string crypt (string input_string [, string salt])
  这一函数完成被称作单向加密的功能,也就是说,它可以加密一些明码,但不能够将密码转换为原来的明码。单向加密的口令一旦落入第三方人的手里,由于不能被还原为明文,因此也没有什么大用处。在验证用户输入的口令时,用户的输入采用的也是单向算法,如果输入与存储的经加密后的口令相匹配,则输入的口令一定是正确的。
  这个函数的input_string参数是需要加密的字符串,第二个参数salt是一个位字串,它能够影响加密的暗码,进一步地排除被称作预计算攻击的可能性。缺省情况下,php使用一个2个字符的DES干扰串,如果你的系统使用的是MD5 ,它会使用一个12个字符的干扰串。我们可以通过执行下面的命令发现系统将要使用的干扰串的长度:
  print "系统使用的干扰串的长度是:". CRYPT_SALT_LENGTH;
  crypt()支持四种算法,下面是它支持的算法和相应的salt参数的长度:
  [注:以下用表格]
  算法 Salt长度
  CRYPT_STD_DES 2-character (默认)
  CRYPT_EXT_DES 9-character
  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的口令-应答验证系统的应用
  
  $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);


喜欢0 评分0
游客

返回顶部