admin 管理员组文章数量: 1184232
2024年4月23日发(作者:什么是c语言整型常量)
维普资讯
L■
■
■
囊
一
文/竹叶青
数据加密在我们生活中的地位已经越来越重蔓了,尤其是 作为crypt()函数的一个例子,考虑这样一种情况,你
希望创建一段PHP脚本程序限制对一个目录的访问,只允许
_
■
■
考虑到在网络上发生的大量交易和传输的大量数据。如果对采用
安全措施有兴趣的话.也一定会有兴趣了解PHP提供的一系列安
全功能 在本篇文章中,我们将介绍这些功能,提供一些基本的
能够提供正确的用户名和口令的用户访问这一目录.我将把
资料存储在我喜欢的数据库 s札的—个表中.下面我们以
创建这个被称作members的表开始我们的例子:
mysql>CF¥cATE TABLE m目由ers(
)us豇n岫e CIGAR(14)NOI吼 L
一
用法,以便你能够为自己的应用软件中增加安全功能。
P的加密功能
一
■
一
只要有一点使用非 indo霄s平台经验的人可能对cr ̄tO
一
>password口t^R(32) Hu上.
也相当熟悉,这一函数完成被称作单向加密的功能,它可
以加密一些明码,但不自巨够将密码转换为原来的明码。尽管
从表面上来看这似乎是一个没有什么用处的功能,但它的确
)m
)):
m err ̄e)
■
然后,我们假定下面的数据已经存储在该表中:
用户名密码
clark keloDICg771比
bn e bB1订Ynz。^
peter瑚 州 舒删
被广泛用来保证系统密码的完整性。因为,单向加密的口令
旦落入第三方人的手里,由于不能被还原为明文,因此也
没有什么太用处。在验证用户输入的口令时,用户的输入
采用的也是单向算法,如果输入与存储的经加密后的口令相
匹配,则输入的口信一定是正确的。
PHP同样提供了使用其crypt 0函数完成单向加密功能的
可能性。我将在这里简要地介绍该函数:
mh Ⅱ t‘e” ng i t
这些加密的口令对应的明码分别是kent、banner和
p ̄rker。注意一下每个口令的前二个字母,这是因为我使用了
下面的代码,根据口令的前二个字母剖建干扰串的z
¥ent edP s_
r1ng L.stri ̄“t】) I鼢h=s曲 T嫱明 婵 g柏rd.啦 :
其中的inputstring参数是需要加密的字符串,第二个
luserPs州=crYPt(SentBredPass ̄rd,l 1 :
可选的salt是一个位字串,它自巨够影响加密的暗码,进一
步地排除被称作预计算攻击的可能性。缺省情况下,PHP使
用一个2个字符的DES干扰串,如果你的系统使用的是MD5
i'/SuserPm,d熬后就和用户名—。起存储在埘s皿中
我将使用Apache的口令应答认证配置提示用户输入用
户名和口令,一个鲜为人知的有关P肝的信息是,它可以把
Apa c h e 的口令一应菩系统输入的用户名和口令识别为
¥P咿
删
一
(我将在以后介绍帅5算法),它会使用一个12个字符的干扰
串。顺便说一下,可以通过执行下面的命令发现系统将要使用
的干扰串的长度:
print №system salt size is: cRwr SALT LE硎:
_I脚汛和¥PHP一删 秘将在身份验证脚本中用
到这二个变量。花一些时间仔细阅读下面的脚奉,多注意一
下其中的解释.以便更好地理解下面的代码:
crmtO ̄Al ̄cha的口々一应普验证幕境的应用
<?p
系统也可能支持其他的加密算法 crypt 0支持四种算
法,下面是它支持的算法和相应的S al t参数的长度;
算法Salt长度
CM
—
Shost= localhost :
Suser= z0rT :
¥p8 : heu odon .
S曲= uses :
STI)DES 2-chex ̄cter(Default)
OPiF ̄EX ̄DES 9_chBl ter
一
Y
C
一
5 1}char日ct beginming with¥15
日 IsH 16-chsr ̄ter beginning lith¥25
Set叫ul izati讲L to False
Sautborizati ̄=O:
用crypt 0实现用户身份验证
Veri奸that has tered岫 口鼬・ 曲刊
维普资讯
if(issec({I ALrrH Us嘞Ⅱisset(¥m )):
print1 :¥er ̄_mg
)
sql-pc锄ect h。st.¥岫er, s 叮die( Can’t connect tol s
 ̄iwer! ):
mysql
select db(¥db)OF die('Can t select datal:ese! ):
_
结果:
//Perform the encrypti ̄
囊 t 栩Ibstr( 咿J【mLJ 0,2);
注意,结果的长度为32个字符・再来 下下面的表
.
轴眦眦.d—pg-d=crypt(车】刊 舢11j—P Ssalt).
//Build the queF ̄
very=-sⅡE【=_I us 一
l】s B =’SP} AuTH
一
其中的¥msg的值有了一点微小的变纯-
使用rod50对—叶.稍铮璺 _七的字符串进行瀹编
F n ̄bers㈣
(?php
。栅
,,注意,Ⅲess姆中少了一十s
g  ̄This is∞ that I just_rote :
d=’SencrT;ted ̄swd一
//Execute the query
if(mysql
nu ̄ows{mysql quay0口u盯y))一1)‘
_
Se ̄c_mg=md5(1
—
,
print }msll2:;etlc
msg<br/Xhr,)
>
th lzati0n:1
endif
.
结果:
hasn2:胡6cfSl1bd5删46d50d61738o82cOc
endif:
//cmfirm Butborization
可以发现,尽管二个结果的长度都是32十字符.但
明文中一点微小的变化使得结果发生了很太的变化,因此,
混编和md50函数是检查数据中微小变化的—个很好的工具。
尽管crypt0和rod50备有用处,但二者在功能上都受到
一
if(!Saut ̄ori z io :
heB ̄Br(。 Authpnticate:Basic realm ̄ Private ),
heB ̄er(。I{ITP/1 0 401 Unauthorized ),
print You
ex1t
e mauthori zed tO enter this are&
定的限制。在下面的部分中,我们将介绍二十非常有用的
else:
被称作k ̄rpt和 ̄hasyh的PHP扩展,将太太拓展PHP用户在加
密方面的选择。
尽管我们在上面的小节中说明了单向加密的重要性,但
后
 ̄'int ]his 1 s ble secret血cB!
endif:
?>
上面就是一个核实用户访问权限的简单身份验证系统。
在使用crypt 0保护重要的机密资料时,记住在缺省状态下使
用的cryptO ̄是最安全的,只能用在对安全性要求较低的
硅 M,t
幸运的是,PHP通过№rypt扩 艮库的形式提供了竭荆l司桃
 ̄rypt 2.5.7 Unix【Win32
。
系统中,如果需要较高的安全性能,就需要我在本文的后面介
绍的算法。
下面我将介绍另一个PHP支持的函 ̄--md5 0,这一
Mcrypt 2.4.7是—个 它包
括有22种算法,其中就包括下面的几种算法:
Bl< ̄ffish RC2 Safergk64 xtea
函数使用WI)5散列算法,它有几种很有趣的用法值得一提;
棍编
一
Cast 256 RC4 Safe ̄skl28
D臣RC4iv SerD帆t
个混编函数可以将一个可变长度的信息变换为具有固
Eai ̄a Rijndael一128 rnreeway
Gost Rijndael—l啦!riDle咂s
LOKI97 Rijndael 2 ̄Twofish
 ̄ferplus Wake
定长度被混编过的输出,也被称作 信息文摘 。这是十
分有用的,因为一个固定长度的字符串可以用来检查文件的
完整性和验证数字箍名以及用户身份验证。由于它适合于
咖P,咖P内置的md50混编函数将把一个可变长度的信息转
使用 t
换为1 28位(32个字符)的信息文摘。混编的—个有趣的
特点是不能通过分析混编后的信息得到原来的明码,因为混
Mcrypt的优点不仅仅在于其提供的加密算法较多,还在
于它可以对数据进行加/解密处理,J比 卜’它还提供了35种
娃理数据用的函数。尽管对这些函数进行详细舟绍已经超出
了这篇文章的范囝,我还是要就几个典型的函数作一下简要的
介绍。
编后的结果与原来的明码内容投有依赖关系。即便只改变一
个字符串中的一个字符,也将使得帕5泥编算法计算出二个截
然不同的结果。我们首先来看下表的内容及其相应的结果:
使用md50混编字符串
< }】p
Smsg= Tni㈣is『∞ss ethat I Jllst 01
首先,我将介绍如何使用Mcrypt扩展库对数据进行加
密,然后再介绍如何使用它进行解密。下面的f哨对这一过
程进行了演示,首先是对数据进行加密,然后在测览器上显
示加密后的数据,并将加密后
¥ ̄nc
msg
=
ord5
(
_
.
维普资讯
■I●一■●■■■■
将它显示在浏览器上。
使用Mcrypt对数据进行加、解密
//D日Bi目咀te string to be L 肚ed
}lAV^Ll2B Ij^¨L256 T1
使用■Ⅻ
对信息进行混缠非常俯单・看一 下面 I倒子・
<
Sstri ̄= AI ̄pli酣Cryptngre ̄y,
自 ̄nderful口7m0
№Scbaeier,is
¥h曲
一
g=圳^s}【_TIG瓯:
the directi ̄to the日 l麒fort 1■o
,refea-mlce ̄ .
s蜘8e= Th皓Ⅲ
//h口7pti0n,曲口 i00 key
Skey="Four score andt ̄nty yearsngo":
ste口slefttⅡ ee s rishtt cha
cllad :
黾;
’’’
//EncxTption Algorithm
¥ciphe ̄jlg=
—
Shashe4
mes. ̄e= ̄mh(¥has口一日1g.善晴昭sa胂).
_
一
RIJ№m
:
print
ity
?>
hnsb ̄咐e醴窖e is b 硼删 神):
//☆ea the initializezin v ̄tor fnr added
¥iv=mcrypt_creete—iv(mcrypt ̄et iv size(¥c1p}ler alg,
唧 0吨
一
执行这一段脚本程序将得到下面的输出结果-
}日tled s is
髓).-既YPT_R㈣:
// t呻t。rigiTIa1 string
print Original string
//Enerypt Sstring
知 ∞ 一str T =mcr ̄t
encrypt(¥ciPher
alg,{ n
__
一
trinB<p) .
在这里使用hin2hex()函数的目的是方便我们理解
Shashed
message的输出,这是因
_
式,为了能够将它转化为易于理解的格式,必须将它转换
为十六进制格式。
¥strins,-口m
-l。DE
一
.
¥iv),
//Cenvla ̄to he.decimal md output to bro ̄ser
pl'i ̄*l ̄cryoted ̄rig:■binn2bex(¥et】cr坤t
stri . (p> .
一
需要注意的是.混编是单向功能,其结果不依艘输入,
因此可以公开显示这—信息。这一策略通常用于让用户比瞍下
¥decr 一str 增=哪
—
t_decr t(¥cip}ler alg.¥key.
—
¥e鼬r,pted
stri . 盯 m咂
c
—
{1计.
载文件和系统管理员提供的文件.以确保文件的完整性。
 ̄dhash还有其他一些有用的函数。倒如,我需要输出
一
ripnt Decrypted s ̄rig:¥decr ̄ted
string".
n
?>
个№ash支持的算法的名字.由于岫蹦 支持的所有算法
的名字都以MHASH
开头.因此,可以通过执行如下的代码
一
执行上面的脚本将会产生下面的输出:
Original string:Applied
O埘∞f c哪0 印h ref盯en曲.
p 哪 Bruce Sc] ̄eier.i s a
完成这一任务
<?php
¥be ̄b_al¥=Ⅻ删JI ;
ripnt r}lis抽tB has be朗hashed tb the ̄.
heshine a1
№cr,pted string lied CrYptograPhy.by Bruce Schneier.is a
)
i”l
mnd ̄-ful cryotngr ̄hy referet】ce.
得到的输出是:
—
上面自年代码中二个最典型的函数是mcrypt
enc ̄rpt()和
 ̄czTpt—dec ̄t0.它们的用途是显而易见的。我使用了“电
Thi s data has be∞hashed withthe TD∞}m i  ̄em-itm
关于PHP和加密最后需要注意的一个问题
关于P咿和加密需要注意的最后的—个重要问题是在服
务器和客户端之问传输的数据在传输过程中是不安全的!
PHP是一种服务器端技术,不能阻止数据在传输过程中泄
密。因此,如果想实现一个完整的安全应用.建议选用
Apache—SSL或其他的安全服务器布置。
报密码本 模式,Mcrypt提供了几种加密方式,由于每种加
密方式都有可以影响密码安全的特定字符,因此每种模式都
需要了解。对于没有接触过密码系统的读者来说.可能对
mcrypt
create
_
_
iv()函数更有兴趣,尽管对这一函数进行舰雇
的解释已经超出了本篇文章的范围,但我仍然会提到它创建的
初始化向量(hence。 iv).这一向量可以使每条信息彼此独
立。尽管不是所有的模式都需要这一初始化变量,但如果在要
求的模式中投有提供这一变量.PHP就会给出警告信息。
■ i1l扩展库
仔细检查mash v,n 8.3的头文件Ⅱ止laslL h可以知道,它
支持下面的棍编算法:
a
铷
渊
H
160帅5
182 I{IPl ̄l印
不论在仅了这讨用篇这论于文篇数章了文据最P章盱加后介密内.绍置的我了功一需P的能要咿c强指r最y大出有pt的用()扩是的展和,功庠—m能d一十之5(真—)加 正—密r安—y函p全羲t数和的据,她P加H还aP密S讨l应1,。 蓑荔黧雾≥} 霪雾璧蕤 爱耄荨萎
用 由于PHP是一种瑕务器端的技
术,因此,在数据由客户端向服务器螭进行传输时,它不能
I ̄AVAI224 SSA1
保证数据的安全。■
版权声明:本文标题:谈谈PHP中的数据加密 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713833965a653672.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论