|
了解crypt()
只要有一点使用非Windows平台经验的读者都可能对crypt()相当熟悉,这一函数完成被称作单向加密的功能,它可以加密一些明码,但不能反过来将密码重新转换为原来的明码。crypt()函数定义如下。
string crypt (string input_string [, string salt])
其中,input_string参数是需要加密的明文字符串,第二个可选的salt是一个位字串,能够影响加密的暗码,进一步排除被破解的可能性。缺省情况下,PHP使用一个2个字符的DES干扰串,如果系统使用的是MD5(参考下一节内容),PHP则会使用一个12个字符的干扰串。可以通过执行下面的命令发现系统将要使用的干扰串的长度。
print "My system salt size is: ". CRYPT_SALT_LENGTH;
crypt()支持4种加密算法,表19.1显示了其支持的算法和相应的salt参数的长度。
表crypt()支持四种加密算法
[TR]
| [TD]算法[/TD]
| [TD]Salt长度[/TD][/TR]
| [TR]
| [TD]CRYPT_STD_DES[/TD]
| [TD]2-character (Default)[/TD][/TR]
| [TR]
| [TD]CRYPT_EXT_DES[/TD]
| [TD]9-character[/TD][/TR]
| [TR]
| [TD]CRYPT_MD5[/TD]
| [TD]12-character beginning with $1$[/TD][/TR]
| [TR]
| [TD]CRYPT_BLOWFISH[/TD]
| [TD]16-character beginning with $2$[/TD][/TR] |
从表面上看,crypt()的函数似乎没有什么用处,但该函数的确被广泛用来保证系统密码的完整性。因为,单向加密的口令即使落入第三方的手里,由于不能被还原为明文,也没有什么大用处。
用crypt()实现用户身份验证
上一部分简单介绍了crypt()函数的功能,下面利用其来实现用户的身份验证,其所要实现的目标同19.2.3节所介绍的一致。
[U]复制代码[/U] 代码如下:
示例与上一节所介绍的使用XOR加密算法来保护用户信息非常类似,其核心部分在于第16、17行使用crypt()函数获取加密后的密码,而通过在第25行比较数据库中的密码和加密后的密码是否相等来检查用户是否合法。
下面,通过一个实例来看一下加密后的密码会变成什么样子。
例如,用户名为rock,密码为123456,则加密后的密码为:
12tir.zIbWQ3c
上面就实现了一个简单的用户身份验证系统。在使用crypt()保护重要的机密信息时,需要注意的是,在缺省状态下使用crypt()并不是最安全的,只能用在对安全性要求较低的系统中。
您可能感兴趣的文章:PHP学习笔记 用户注册模块用户类以及验证码类PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)注册页面之前先验证用户名是否存在的php代码php用户注册页面利用js进行表单验证具体实例php中filter函数验证、过滤用户输入的数据PHP利用header跳转失效的解决方法PHP中Header使用的HTTP协议及常用方法小结php验证用户名是否以字母开头与验证密码实例PHP 常用的header头部定义汇总php header函数的常用http头设置php用户注册信息验证正则表达式php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
|
|