专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »安全 » phpmd5加密:PHP中的MD5加密 »正文

phpmd5加密:PHP中的MD5加密

来源: 发布时间:星期六, 2009年9月12日 浏览:30次 评论:0
来源:http://blog.csdn.net/httpnet/

综述:密码学是研究编制密码(我们简称为加密:encode)和破译密码(我们称的为解密:decode)技术科学研究密码变化客观规律应用于编制密码以保守通信秘密称为编码学;应用于破译密码以获取通信情报称为破译学总称密码学通常情况下人们将可懂文本称为明文;将明文变换成不可懂文本称为密文把明文变换成密文过程叫加密;其逆过程即把密文变换成明文过程叫解密

PHP中提供了哪些数据加密功能?

PHP提供了crypt完成加密功能:

 crypt ( input_ [, salt])  

这完成被称作单向加密功能也就是说它可以加密些明码但不能够将密码转换为原来明码单向加密口令旦落入第 3方人手里由于不能被还原为明文因此也没有什么大用处在验证用户输入口令时用户输入采用也是单向算法如果输入和存储经加密后口令相匹配则输入口令定是正确

这个input_参数是需要加密第 2个参数salt是个位字串它能够影响加密暗码步地排除被称作预计算攻击可能性缺省情况下PHP使用个2个DES干扰串如果你系统使用是MD5 它会使用个12个干扰串我们可以通过执行下面命令发现系统将要使用干扰串长度:

pr "系统使用干扰串长度是:". CRYPT_SALT_LENGTH;

crypt支持 4种算法下面是它支持算法和相应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我们将根据口令前 2个字母创建干扰串:

$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;

// 提示用户输入帐号和密码

 (is($PHP_AUTH_USER) && is($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\'";

// 执行查询
 (mysql_numrows(mysql_query($query)) 1) {
$authorization = 1;
}
}

 (! $authorization){
header(\'WWW-Authenticate: Basic realm="用户验证"\');
header(\'HTTP/1.0 401 Unauthorized\');
pr "无法通过验证";
exit;
} {
pr "已经加密";
}
?>  

在缺省状态下使用 crypt并不是最安全所以如果需要较高安全性能就需要其他更好算法比如md5使用MD5散列算法

如何通过MD5方式进行加密?

PHP中通过MD5方式加密有md5个作用是混编

个混编可以将个可变长度信息变换为具有固定长度被混编过输出也被称作"信息文摘"这是十分有用 个固定长度串可以用来检查文件完整性和验证数字签名和用户身份PHP内置md5混编将把个可变长度信息转换为128位(32个)信息文摘混编个有趣特点是:不能通过分析混编后信息得到原来明码混编后结果 和原来明码内容没有依赖关系即便只改变串中也将使得MD5混编算法计算出 2个截然区别结果我们首先来看下表内容及其相应结果:

使用md5混编

<php
$input = "Hello,PHP world!";
$output = md5($input);
pr "输出: $output ";
?>  

结果:

输出: 7996b5e0804042fd531907a4900f190e

注意结果长度为32个我们把$input值稍微改变下:

使用md5个稍微变化串进行混编

<?php
$input = "Hello,PHP World!";
$output = md5($input);
pr "输出: $output ";
?>  

结果:

hash2: f0456d48ed06a5c35b1e42561fa7a016
可以发现尽管 2个结果长度都是32个但明文中点微小变化使得结果发生了很大变化我们可以利用这个特点来检查数据中微小变化




  • 篇文章: 打造自己Windows终端服务客户端

  • 篇文章: 新权限表示思路方法
  • 0

    相关文章

    读者评论

    发表评论

    • 昵称:
    • 内容: