PHP中的加密功能(连载)

carbulink 2005-05-19 10:10:48
最近找到一个好地方,看到了这篇文章觉得不错,与大家分享!

数据加密在我们生活中的地位已经越来越重要了,尤其是考虑到在网络上发生的大量交易和传输的大量数据。如果对于采用安全措施有兴趣的话,也一定会有兴趣了解PHP提供的一系列安全功能。在本篇文章中,我们将介绍这些功能,提供一些基本的用法,以便你能够为自己的应用软件中增加安全功能。
预备知识
在详细介绍PHP的安全功能之前,我们需要花点时间来向没有接触过这方面内容的读者介绍一些有关密码学的基本知识,如果对密码学的基本概念已经非常熟悉,就可以跳过去这一部分。
密码学可以通俗地被描述为对加/解密的研究和实验,加密是将易懂的资料转换为不易懂资料的过程,解密则是将不易懂的资料转换为原来易懂资料的过程。不易懂的资料被称作密码,易懂的资料被称作明码。
数据的加/解密都需要一定的算法,这些算法可以非常地简单,如著名的凯撒码,但当前的加密算法要相对复杂得多,其中一些利用现有的方法甚至是无法破译的。
PHP的加密功能
只要有一点使用非Windows平台经验的人可能对crypt()也相当熟悉,这一函数完成被称作单向加密的功能,它可以加密一些明码,但不能够将密码转换为原来的明码。尽管从表面上来看这似乎是一个没有什么用处的功能,但它的确被广泛用来保证系统密码的完整性。因为,单向加密的口令一旦落入第三方人的手里,由于不能被还原为明文,因此也没有什么大用处。在验证用户输入的口令时,用户的输入采用的也是单向算法,如果输入与存储的经加密后的口令相匹配,则输入的口信一定是正确的。
PHP同样提供了使用其crypt()函数完成单向加密功能的可能性。我将在这里简要地介绍该函数:
string crypt (string input_string [, string salt])
其中的input_string参数是需要加密的字符串,第二个可选的salt是一个位字串,它能够影响加密的暗码,进一步地排除被称作预计算攻击的可能性。缺省情况下,PHP使用一个2个字符的DES干扰串,如果你的系统使用的是MD5(我将在以后介绍MD5算法),它会使用一个12个字符的干扰串。顺便说一下,可以通过执行下面的命令发现系统将要使用的干扰串的长度:
print "My system salt size is: ". CRYPT_SALT_LENGTH;
系统也可能支持其他的加密算法。crypt()支持四种算法,下面是它支持的算法和相应的salt参数的长度:

算法 Salt长度
CRYPT_STD_DES 2-character (Default)
CRYPT_EXT_DES 9-character
CRYPT_MD5 12-character beginning with $1$
CRYPT_BLOWFISH 16-character beginning with $2$

用crypt()实现用户身份验证
作为crypt()函数的一个例子,考虑这样一种情况,你希望创建一段PHP脚本程序限制对一个目录的访问,只允许能够提供正确的用户名和口令的用户访问这一目录。我将把资料存储在我喜欢的数据库MySQL的一个表中。下面我们以创建这个被称作members的表开始我们的例子:
mysql>CREATE TABLE members (
->username CHAR(14) NOT NULL,
->password CHAR(32) NOT NULL,
->PRIMARY KEY(username)
->);


然后,我们假定下面的数据已经存储在该表中:
用户名 密码
clark keloD1C377lKE
bruce ba1T7vnz9AWgk
peter paLUvRWsRLZ4U




【回贴】 [原创] PHP中的加密功能(2) 作者:小猪哥 查看:0 回复:0

[第 2 楼] 发表于4/26/2005 13:55:40

这些加密的口令对应的明码分别是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
$host = "localhost";
$user = "zorro";
$pswd = "hellodolly";
$db = "users";
// Set authorization to False
$authorization = 0;
// Verify that user has entered username and password
if (isset($PHP_AUTH_USER) && isset($PHP_AUTH_PW)) :
mysql_pconnect($host, $user, $pswd) or die("Can"t connect to MySQL server!");
mysql_select_db($db) or die("Can"t select database!");
// Perform the encryption
$salt = substr($PHP_AUTH_PW, 0, 2);
$encrypted_pswd = crypt($PHP_AUTH_PW, $salt);
// Build the query
$query = "SELECT username FROM members WHERE
username = "$PHP_AUTH_USER" AND
password = "$encrypted_pswd"";
// Execute the query
if (mysql_numrows(mysql_query($query)) == 1) :
$authorization = 1;
endif;
endif;
// confirm authorization
if (! $authorization) :
header("WWW-Authenticate: Basic realm="Private"");
header("HTTP/1.0 401 Unauthorized");
print "You are unauthorized to enter this area.";
exit;
else :
print "This is the secret data!";
endif;
?>
上面就是一个核实用户访问权限的简单身份验证系统。在使用crypt()保护重要的机密资料时,记住在缺省状态下使用的crypt()并不是最安全的,只能用在对安全性要求较低的系统中,如果需要较高的安全性能,就需要我在本篇文章的后面介绍的算法。


未完,大家自己可以到http://www.weblogic.com.cn的技术论坛去看!很不错的,不敢独享^_^
...全文
142 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不错不错,楼主真是好人哪~~~~
ray929 2005-05-19
  • 打赏
  • 举报
回复
呵呵,前几天去网逻看了
今天又看见了
tony-杨 2005-05-19
  • 打赏
  • 举报
回复
顶倒~~继续发噻
EKVOD2.0正式版特点: 一、全新的后台设计 1、添加管理影片: 添加影片管理影片更方便,分类添加和管理更加简单化,支持分类别名,分类页模版设置,增加影片专题功能,增加tag标签,增加按字母分类影片,连载管理,推荐管理,影片报错等功能管理! 2、生成静态页管理: 可以一键生成全站,也可以按照分类页生成,也可按照内容页ID生成,可以选择生产当日,或者3天内的影片,生成网站地图,google和baidu地图,rss文件,js文件等,专题生成页面,自定义页面生成等! 3、强大的自定义采集: 可以按照站点添加采集分类,可以整站一键采集,也可以分开采集,操作更加灵活!采集分类设置更加灵活,可以指定分类,也可采集目标站的分类然后按照系统设置的自动转化分类,可以指定只采集最近 几天内的影片,播放器也可以自由选择! 在线规则测试,强大的替换功能,强大的插件支持功能,强大的防盗链突破功能,能让您更方便采集任何站点! 采集入库到临时数据库,方便管理和入库操作,临时数据库管理功能可以方便您修改和管理采集的影片,可以避免因采集错误而造成的网站问题,入库可以设置当遇到同影片时:智能覆盖、地址头部追加、地址尾部追加、覆盖地址、新增数据、仅更新地址以外的信息等,可以选择各种入库方式! 导出导入规则更加方便,导出规则以base64方式加密,分享方便不会丢失数据! 4、模版标签管理: 后置直接管理模版文件,可以编辑、添加模版,模版标签向导等,自定义标签添加管理等! 5、集成高级工具 重复数据检测可以方便您查看数据库里是否有同名的影片,数据批量替换功能让您方便的替换影片数据库里的影片名、影片简介等,删除指定来源功能可以删除指定的来源数据,数据库备份、数据库还原、数据库优化等功能,强大的计划任务功能:可以在制定时间自动执行指定的文件,在需要的情况下,您也可以方便的将其用于程序功能的扩展!文件校验是木马扫描工具可以让您检测您的网站是否被植入恶意程序! 6、扩展选项 后台可以直接设置广告文件,调用广告代码,友情链接管理等! 7、系统设置 系统参数设置:可以在后台一键切换动态运行模式、静态运行模式、伪静态运行模式,可以设置前台文件夹名称,选择运行方式等,设置各种重要设置! 播放器设置,播放来源设置:可以设置播放来源在前台显示的顺序 系统管理员管理,可以设置系统管理员(拥有全部权限) 和网站编辑(只拥有数据管理权限)等 8、在线升级功能 如果有新文件后台会提示升级,直接可以在后台在线升级! 9、资源库在线采集功能 可以直接采集官方资源库,用鼠标点几下就能获得大量的数据! 10、数据库图片在线下载功能 程序自动检测有无外连图片并提示下载,可以突破防盗链的图片 二、强大缓存系统 EKVOD2.0使用全新的缓存方式,可以缓存模版、缓存数据库,在后台直接设置切换,让您的系统运行的更加流畅,生成静态页面更加迅速,后台生成静态页面速度可以达到每秒100页(非最高生成速度),打开动态页面只需要0.00几秒,开启数据库缓存基本不读数据库,可以更大的节省资源! 三、强大而灵活的模版标签: 2.0新增了tag标签,letter字母标签,专辑标签等,更灵活的万能时间标签,万能分页标签等,详情请查看压缩包里的说明文件! 四、可以自定义播放器文件 可以自己设置自己需要的播放器,灵活添加,灵活设置! 五、强大的负载能力和安全过滤功能 数据库设计模式和缓存功能可以承受更大的在线人数,严格的安全过滤经专业代码安全审计人员审计过,让您的系统运行的更安全快捷!

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧