当前位置: 代码网 > 服务器>网络安全>加密解密 > PHP中的MD5加密

PHP中的MD5加密

2008年10月08日 加密解密 我要评论
PHP中的MD5加密 综述:密码学是研究编制密码(我们简称为加密:encode)和破译密码(我们称之为解密:decode)的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应... 08-10-08
综述:密码学是研究编制密码(我们简称为加密: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的口令-应答验证系统的应用
????<?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 "已经加密";
????}
?????>
??在缺省状态下使用的 crypt()并不是最安全的,所以如果需要较高的安全性能,就需要其他更好的算法,比如md5(),这一函数使用md5散列算法。
??如何通过md5方式进行加密?
??php中通过md5方式加密的函数有md5(),它的一个作用是混编。
??一个混编函数可以将一个可变长度的信息变换为具有固定长度被混编过的输出,也被称作"信息文摘",这是十分有用的,因为 一个固定长度的字符串可以用来检查文件的完整性和验证数字签名与用户身份。php内置的md5()混编函数将把一个可变长度的信息转换为128位(32个字符)的信息文摘。混编的一个有趣的特点是:不能通过分析混编后的信息得到原来的明码,因为混编后的结果 与原来的明码内容没有依赖关系。即便只改变一个字符串中的一个字符,也将使得md5混编算法计算出二个截然不同的结果。我们首先来看下表的内容及其相应的结果:
??使用md5()混编字符串
????<php
????$input = "hello,php world!";
????$output = md5($input);
????print "输出: $output ";
?????>
??结果:
????输出: 7996b5e0804042fd531907a4900f190e
??注意,结果的长度为32个字符。我们把$input的值稍微改变一下:
??使用md5()对一个稍微变化的字符串进行混编
????<?php
????$input = "hello,php world!";
????$output = md5($input);
????print "输出: $output ";
?????>
??结果:
????hash2: f0456d48ed06a5c35b1e42561fa7a016
??可以发现,尽管二个结果的长度都是32个字符,但明文中一点微小的变化使得结果发生了很大的变化,我们可以利用这个特点来检查数据中微小变化。

(0)

相关文章:

  • 防黑加把锁 反溢出加密码控制CMD权限

    防黑加把锁 反溢出加密码控制CMD权限

    防黑加把锁 反溢出加密码控制CMD权限 大家都知道,微软的溢出漏洞真实一箩筐,而溢出自然就是要拿到CMD权限,但是如果我们的CMD要密码的话…&... [阅读全文]
  • 壳,加壳,脱壳

    壳,加壳,脱壳

    壳,加壳,脱壳 在自然界中,我想大家对壳这东西应该都不会陌生了,由上述故事,我们也可见一斑。自然界中植物用它来保护种子,动物用它来保护身体等等。同样,在一些计... [阅读全文]
  • 利用启动脚本特性 更换Windows XP密码

    利用启动脚本特性 更换Windows XP密码

    利用启动脚本特性 更换Windows XP密码 Windows XP启动脚本(startup scripts)是计算机在登录屏幕出现之前运行的批处理文件,它的... [阅读全文]
  • 各种加密方案分析

    各种加密方案分析

    各种加密方案分析 当前软件加密方法多种多样,已经不可能找出一种分类方法来把各种加密方案很好地区分开来。基本上来说可以分为依赖特定硬件的加密方案和不依赖硬件的加... [阅读全文]
  • 密码遗忘通关手册 减少不必要的麻烦

    密码遗忘通关手册 减少不必要的麻烦

    密码遗忘通关手册 减少不必要的麻烦 我们知道,为了有效维护用户的使用权,进入电脑、上Internet、保护文档等,都要用到不同的账号或密码口令,可以说这些密码... [阅读全文]
  • 策略使用加密狗进行加密

    策略使用加密狗进行加密

    策略使用加密狗进行加密 现在的解密技术排除法律和道德因素,就从学术角度来说是门科学。它与加密技术一样是相辅相成不断提高。 以下就针对使用加密狗(加密锁)进行硬... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com