当前位置: 电脑软硬件应用网 > 设计学院 > 网络编程 > PHP教程 > 正文 |
|
|||
PHP安全编程之加密功能 | |||
2005-12-30 19:19:14 文/45IT收集 出处:电脑软硬件应用网 | |||
数据加密在我们生活中的地位已经越来越重要了,尤其是考虑到在网络上发生的大量交易和传输的大量数据。如果对于采用安全措施有兴趣的话,也一定会有兴趣了解PHP提供的一系列安全功能。在本篇文章中,我们将介绍这些功能,提供一些基本的用法,以便你能够为自己的应用软件中增加安全功能。 预备知识 密码学可以通俗地被描述为对加/解密的研究和实验,加密是将易懂的资料转换为不易懂资料的过程,解密则是将不易懂的资料转换为原来易懂资料的过程。不易懂的资料被称作密码,易懂的资料被称作明码。 数据的加/解密都需要一定的算法,这些算法可以非常地简单,如著名的凯撒码,但当前的加密算法要相对复杂得多,其中一些利用现有的方法甚至是无法破译的。 PHP的加密功能 PHP同样提供了使用其crypt()函数完成单向加密功能的可能性。我将在这里简要地介绍该函数: string crypt (string input_string [, string salt]) print "My system salt size is: ". CRYPT_SALT_LENGTH; 算法 Salt长度 用crypt()实现用户身份验证 mysql>CREATE TABLE members ( 然后,我们假定下面的数据已经存储在该表中: 用户名 密码 这些加密的口令对应的明码分别是kent、banner和parker。注意一下每个口令的前二个字母,这是因为我使用了下面的代码,根据口令的前二个字母创建干扰串的: . 我将使用Apache的口令-应答认证配置提示用户输入用户名和口令,一个鲜为人知的有关PHP的信息是,它可以把Apache的口令-应答系统输入的用户名和口令识别为和,我将在身份验证脚本中用到这二个变量。花一些时间仔细阅读下面的脚本,多注意一下其中的解释,以便更好地理解下面的代码: crypt()和Apache的口令-应答验证系统的应用 = "localhost"; // Set authorization to False = 0; // Verify that user has entered username and password if (isset() && isset()) : mysql_pconnect(, , ) or die("Can't connect to MySQL mysql_select_db() or die("Can't select database!"); // Perform the encryption // Build the query = "SELECT username FROM members WHERE // Execute the query if (mysql_numrows(mysql_query()) == 1) : endif; // confirm authorization if (! ) : header('WWW-Authenticate: Basic realm="Private"'); else : print "This is the secret data!"; endif; ?> 上面就是一个核实用户访问权限的简单身份验证系统。在使用crypt()保护重要的机密资料时,记住在缺省状态下使用的crypt()并不是最安全的,只能用在对安全性要求较低的系统中,如果需要较高的安全性能,就需要我在本篇文章的后面介绍的算法。 下面我将介绍另一个PHP支持的函数━━md5(),这一函数使用MD5散列算法,它有几种很有趣的用法值得一提: 混编 结果: hash: 81ea092649ca32b5ba375e81d8f4972c 使用md5()对一个稍微变化的字符串进行混编 结果: hash2: e86cf511bd5490d46d5cd61738c82c0c 尽管crypt()和md5()各有用处,但二者在功能上都受到一定的限制。在下面的部分中,我们将介绍二个非常有用的被称作Mcrypt和Mhash的PHP扩展,将大大拓展PHP用户在加密方面的选择。 尽管我们在上面的小节中说明了单向加密的重要性,但有时我们可能需要在加密后,再把密码数据还原成原来的数据,幸运的是,PHP通过Mcrypt扩展库的形式提供了这种可能性。 Mcrypt Blowfish RC2 Safer-sk64 xtea 下载Mcrypt软件包。 使用Mcrypt 首先,我将介绍如何使用Mcrypt扩展库对数据进行加密,然后再介绍如何使用它进行解密。下面的代码对这一过程进行了演示,首先是对数据进行加密,然后在浏览器上显示加密后的数据,并将加密后的数据还原为原来的字符串,将它显示在浏览器上。 使用Mcrypt对数据进行加、解密 // Designate string to be encrypted // Encryption/decryption key // Encryption Algorithm // Create the initialization vector for added security. // Output original string // Encrypt // Convert to hexadecimal and output to browser = mcrypt_decrypt(, key, print "Decrypted string: "; ?> 执行上面的脚本将会产生下面的输出: Original string: Applied Cryptography, by Bruce Schneier, is a wonderful cryptography reference. Encrypted string: 02a7c58b1ebd22a9523468694b091e60411cc4dea8652bb8072 34fa06bbfb20e71ecf525f29df58e28f3d9bf541f7ebcecf62b c89fde4d8e7ba1e6cc9ea24850478c11742f5cfa1d23fe22fe8 bfbab5e Decrypted string: Applied Cryptography, by Bruce Schneier, is a wonderful cryptography reference. 上面的代码中二个最典型的函数是mcrypt_encrypt()和mcrypt_decrypt(),它们的用途是显而易见的。我使用了“电报密码本”模式,Mcrypt提供了几种加密方式,由于每种加密方式都有可以影响密码安全的特定字符,因此每种模式都需要了解。对于没有接触过密码系统的读者来说,可能对mcrypt_create_iv()函数更有兴趣,尽管对这一函数进行彻底的解释已经超出了本篇文章的范围,但我仍然会提到它创建的初始化向量(hence, iv),这一向量可以使每条信息彼此独立。尽管不是所有的模式都需要这一初始化变量,但如果在要求的模式中没有提供这一变量,PHP就会给出警告信息。 Mhash扩展库 0.8.3版的Mhash扩展库支持12种混编算法,仔细检查Mhash v.0.8.3的头文件mhash.h可以知道,它支持下面的混编算法: CRC32 HAVAL160 MD5 下载Mhash扩展库 对于Windows用户而言http://www.php4win.de中有一个很好的包括Mhash扩展库在内的PHP软件包。只要下载并进行解压缩,然后根据其中的readme.first文档中的指令进行安装即可。 使用Mhash <?php |
|||
最新热点 | 最新推荐 | 相关文章 | ||
javascript实用技巧点滴(三) javascript实用技巧点滴(2) javascript实用技巧点滴(1) javascript教程 - 第一课 1.1 用js制作完善的日,月组合下拉框 利用JSP编程建立动态Web站点 用PHP制作留言板 PHP生成动态WAP页面 PHP实现文件下载 PHP4的session功能 |
关于45IT | About 45IT | 联系方式 | 版权声明 | 网站导航 | |
Copyright © 2003-2011 45IT. All Rights Reserved 浙ICP备09049068号 |