admin 管理员组文章数量: 1086019
2024年4月25日发(作者:novelkeys官网)
维普资讯
计算机时代2002年第1期 ・】7・
沈新根
(中国建设银行新江省海盐支行314300)
1引言
”2db76afceSc0I 7662770fc2360cclcd4”!
”648al9754f7803769c66f87Ib9cA17Ia”!
当你看到上面的两行字符串的时候,肯定会感到很奇
怪,这是什么意思?当然.我并不要你理解这两行字符串
的意思,固为通过加密的方法臆藏了真正的信息
随着计算机应用的推广,对数据加密的要求也越来越
高.特别是因为在网络上传送的数据是采用明文的方式,
所“如何保证在数据传输的过程中不被监听或拦截,将变
得非常的重要 现在越来越多的网站采用PHP来开发网
站,本文将介绍如伺通过PHP的加解密功能来增强网站应
用的安全性。
2预备知识
在讲解PHP的功能前先介绍一些关于密码学的由容,
如果你已经了解一些密码学的基本内容.请跳过本节。
消息(message)被称为明文(plaintext)。用某种方法
曲装消息以隐藏它的内容的过程称为加密(cnctTption),
而被加密的数据称为密文(cjphertext)i把密文转变为明
文的过程称为解密(dectyption)
密码编码学一般认为是使消息保密的技术和科学 数
据可 通过一些算法进行加密和解密,这些算法可以是非
常的简单、例如Caeser密码就是通过把每一个明文字符移
动N位的方法来实现加密。当然,现在有些算法相当的复
杂,甚至可以认为用目前已知的方法是不能破解的。
3 PHP的加密功能
也许有些使用过非Windows平台的人非常熟悉cry p1
0函数。这个函数可 用来对一些明文进行单向加密,但
是它不能把加密过的密文还原成原来的明文 从表面上看
来这个方法没有什么用处.但是 在确保系统密码完整的
领域它被广泛地应用。如果一个被单向加密过的密文落^
第三方手中,对于他们来说没有多大的意义,因为他们不
能从这个密文中获得明文。当需要验证用户输入的密码时,
把用户的输入通过单向加密后与系统保存的密文进行比
较,如果相同,那么输入的密码就是正确的
PHP也提供了它自己的单向加密函数crypt()。
string crypt(siring inpuLsiring【.string salt])
上面是crypt()的函数声明,参数ioputstring是休想
要加密的字符串;第二十可选参数salt可以使产生的密码
降低预计算攻击的威胁 政省地.PHP使用两个字的DES
啦【t宇串。但是,如果你的系统刚好使用的是基于MD5
(在后面将会介绍MD5算法)的密码学.那么PHP使用I2
个字的sa)t的字串。你可Ⅵ利用以下的脚本知道系统的salt
字串的大小:
print”咐syslem salt size ls:”CRYPT SALT
—
LENGTH;
可能你的系统支持别的加密算法,crypt 0总共支持
四种算法,表】列出相关的算法使用的salt宇串的大小
4使用crypt 0进行用乒认证
找们可 使用crypt 0函数作一个例子,很设你想要
通过PHP脚本限制某个目录只允许拥有正确的账号和密码
的用户访问。我使用MySQL来存储数据(可以使l啊
pbpmyadmin来管理Mysq1)。首先创建一个表(表名为
“mcmb ̄s” 。
mysqI>CREATE TABLE members c
一
>username CHAR(14)NOT NULL
一
>password CHAR(32)NOT NULL.
・
>PRIMARY KEY(username)
・
)).
接着、在r丌embers表中加入下列记录:
Username Password
C rk ketoU1C377tKE
B ruo ̄ Be1T7vnz9Awgk
Peler paLUvRWsRLZ4U
字段Passw0rd的值是经过加密的.分别对应的是
“kent”,“banner”和“parker” 注意到它们的前两个字符
维普资讯
18・ Computer era No.1 2002
・
分别和未加密的字串的前两个字符相同。
这是因为使用下面的代码来生成密码的基于前两十字
母的salt:
¥sair substr csenteredPassword.0.2):
//¥enteredPassword是输八的明文密码
SuserPswd crypt(SenteredPassword.¥sa ).
//¥userPsv,d是存^mysql的密码
利用Apache的challenge._csp0nse授权方案来提示用
户输入账号和密码。在PHP中可以使用Apache的challenge—
rcsp0nse把输入的账号和密码分别作为全局变量¥PHP_
AulrH uSER和¥PHP_AUTH PW 请阅读下面的脚本:
脚本I:使用crypt 0和Apache的challenge-response
授权方案。
(,php
¥hosl=”localbost”:
¥user=。 ̄orro";
¥pswd=“hetlodolty’’:
¥db= users
设置为耒敢证
¥authoriz ̄ation;O
枉验输八的账号和密码
if(isset(¥PH口_AuTH_USE R)&&isset{¥PHP』UTH—
P )f
mysql ̄oconnect(Shoat.¥user.¥psw1)or die( 'Can。t
corlrlectto MySQL
se rver!’ ,
mysqlselect
__
db(Sdb)ordie( Can。t selectdatabase!”),
“进行加毫
¥salt=substr{¥PHP-AuTH_P 0.2):
¥enc _pgwd=cwpt(¥PHP—AuTH—P ¥salt);
建立查询
¥query=。"SELECT usemame FROM members WHERE
usemame=’¥PHP AUTH USER’AND
password='¥enclypted psvKI。。’
执行查询
if{rrrysqI
_
numfows(mysqI_query(¥query))==1)(
¥authorization=1:
)
)
//礴矗 盘
if{!Saulhorization)f
header(。wVW Authenticate:Basic erahTl=“Private'”),
header f HTTP,1 0 401 Unauthorized');
Drlnt’'You are unauthorized to ecter this area“
exit;
)
else f
print。q-his is the secret data!“.
)
,>
这样你就拥有了一个简单的认证方案
接下来,介绍PHP支持的另外一十函数rod5()。这个
函数使用MD5散列算法。
5散列法
散列(hash)函数把可变长度的消息转换成固定长度
的输出串(叫做散列值),这也可以称为 消息摘要”。这
个函数非常有用,它可以用来检查文件的完整性和检验数
字签名,另外还可以作为用户认证。PHP内值的rod5(J
散列函数可以把任意长的消息转换128位的消息摘要。应
该注意的是因为经过转换的消息摘要已经和原来的明文没
有任何的关系,所以不可能通过消息摘要破译消息。为了
说明这点,下面的例子通过改变一个字串的一十字符,使
MD5散列算法计算出两十差别很大的消息摘要。首先我
们来看看脚本2和它的输出
脚本2:A string hashedwithrod5 0。
(,php
¥msg;”This is solme message that I Just wrote“.
Senc_msg=rod5(¥msg
print“hash:¥enc_msg
,>
输出结果
hash 81ea092649ca32b5ba3 5e81dSf4972c
注意到输出得结果是32个字符 现在来看看脚本3.
我们对¥msg的值作一些细微的改变:
脚本3 A slightly modiifed string hashed with ord5()。
(,php
把。message 去掉一十一S
¥msg=。q'hls ec ̄lle mesage that I just wfa
Senc
_
msg=rod5{¥msg).
print“hash2:¥enc msg<br/><br,) :
,>
The oufcome:
hssh2:e86cf511bd5490d46d5cd61738c82c0c
正如体所看到的,虽然输出的结果都是32个字符.但
是输出串却完全不同 因此散列法和rod5 0函数被广泛
地应用于检查数据中的细微变化。
虽然crypt 0和rod5 0都有它们各自的用处.但是
他们在功能上也都有相当的限制。
6关于PHP和密码学需要注意的
关于PHP和密码学需要注意的是当数据在服务器和客
户端之间传输的时候,数据是不安全的。PHP是一个服务
器端的技术.它并不能在传输的过程中阻止网络刺探者的
攻击。因此,如果你想做一个完全的安全应用.建议使用
Apache-SSL等其它有名的安全服务器。
版权声明:本文标题:利用PHP的加密功能保护你的数据 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1714031027a662301.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论