background image

PHP

——

开发

PHP 数据加密功能

 

数据加密在我们生活中的地位已经越来越重要了,尤其是考虑到在网络上发生的大量 交
易和传输的大量数据。如果对于采用安全措施有兴趣的话,也一定会有兴趣了解 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 $ 
CRYPT_BLOWFISH 16-character beginning with $ 
用 crypt()

 

实现用户身份验证