当前位置: 编程技术>php
本页文章导读:
▪PHP安全编程之加密功能
数据加密在我们生活中的地位已经越来越重要了,尤其是考虑到在网络上发生的大量交易和传输的大量数据。如果对于采用安全措施有兴趣的话,也一定会有兴趣了解PHP.........
▪PHP中的加密功能
数据加密在我们生活中的地位已经越来越重要了,尤其是考虑到在网络上发生的大量交易和传输的大量数据。如果对于采用安全措施有兴趣的话,也一定会有兴趣.........
▪PHP编程网上资源导航
一、PHP简介
引用PHP(Hgpertext Preprocessor或Personal Home Page Tools)的官方站点www.php.net的定义来说,PHP是一种服务器端、跨平台、HTML嵌入式的脚本语言。其实,它和大家所熟知的.........
[1]PHP安全编程之加密功能
来源: 互联网 发布时间: 2013-11-30
数据加密在我们生活中的地位已经越来越重要了,尤其是考虑到在网络上发生的大量交易和传输的大量数据。如果对于采用安全措施有兴趣的话,也一定会有兴趣了解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 102/td> CRYPT_BLOWFISH 16-character beginning with 102/td> 用crypt()实现用户身份验证 作为crypt()函数的一个例子,考虑这样一种情况,你希望创建一段PHP脚本程序限制对一个目录的访问,只允许能够提供正确的用户名和口令的用户访问这一目录。我将把资料存储在我喜欢的数据库MySQL的一个表中。下面我们以创建这个被称作members的表开始我们的例子: mysql>CREATE TABLE members (
->username CHAR(14) NOT NULL,
->password CHAR(32) NOT NULL,
->PRIMARY KEY(username)
->); 然后,我们假定下面的数据已经存储在该表中: 用户名 密码 clark keloD1C377lKE bruce ba1T7vnz9AWgk peter paLUvRWsRLZ4U 这些加密的口令对应的明码分别是kent、banner和parker。注意一下每个口令的前二个字母,这是因为我使用了下面的代码,根据口令的前二个字母创建干扰串的: .
= substr(, 0, 2);
= crypt(, );
// 然后就和用户名一起存储在MySQL中 我将使用Apache的口令-应答认证配置提示用户输入用户名和口令,一个鲜为人知的有关PHP的信息是,它可以把Apache的口令-应答系统输入的用户名和口令识别为和,我将在身份验证脚本中用到这二个变量。花一些时间仔细阅读下面的脚本,多注意一下其中的解释,以便更好地理解下面的代码: crypt()和Apache的口令-应答验证系统的应用 <?php
= "localhost";
= "zorro";
= "hellodolly";
= "users";
// 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
server!");
mysql_select_db() or die("Can't select database!");
// Perform the encryption
= substr(, 0, 2);
= crypt(, );
// Build the query
= "SELECT username FROM members WHERE
username = '' AND
password = ''";
// Execute the query
if (mysql_numrows(mysql_query()) == 1) :
= 1;
endif;
endif;
// confirm authorization
if (! ) :
header('WWW-Authenticate: Basic realm="Private"');
header('HTTP/1.0 401 Unauthorized');
print "You are unauthorized to enter this area.";
exit;
else :
print "This is the secret data!";
endif;
?> 上面就是一个核实用户访问权限的简单身份验证系统。在使用crypt()保护重要的机密资料时,记住在缺省状态下使用的crypt()并不是最安全的,只能用在对安全性要求较低的系统中,如果需要较高的安全性能,就需要我在本篇文章的后面介绍的算法。 下面我将介绍另一个PHP支持的函数━━md5(),这一函数使用MD5散列算法,它有几种很有趣的用法值得一提: 混编 一个混编函数可以将一个可变长度的信息变换为具有固定长度被混编过的输出,也被称作“信息文摘”。这是十分有用的,因为一个固定长度的字符串可以用来检查文件的完整性和验证数字签名以及用户身份验证。由于它适合于PHP,PHP内置的md5()混编函数将把一个可变长度的信息转换为128位(32个字符)的信息文摘。混编的一个有趣的特点是不能通过分析混编后的信息得到原来的明码,因为混编后的结果与原来的明码内容没有依赖关系。 即便只改变一个字符串中的一个字符,也将使得MD5混编算法计算出二个截然不同的结果。我们首先来看下表的内容及其相应的结果: 使用md5()混编字符串 <?php
= "This is some message that I just wrote";
= md5();
print "hash: ";
?> 结果:hash: 81ea092649ca32b5ba375e81d8f4972c 注意,结果的长度为32个字符。再来看一下下面的表,其中的的值有了一点微小的变化: 使用md5()对一个稍微变化的字符串进行混编 <?php
//注意,message中少了一个s
= "This is some mesage that I just wrote";
= md5();
print "hash2: <br /><br />";
?> 结果:hash2: e86cf511bd5490d46d5cd61738c82c0c 可以发现,尽管二个结果的长度都是32个字符,但明文中一点微小的变化使得结果发生了很大的变化,因此,混编和md5()函数是检查数据中微小变化的一个很好的工具。 尽管crypt()和md5()各有用处,但二者在功能上都受到一定的限制。在下面的部分中,我们将介绍二个非常有用的被称作Mcrypt和Mhash的PHP扩展,将大大拓展PHP用户在加密方面的选择。 尽管我们在上面的小节中说明了单向加密的重要性,但有时我们可能需要在加密后,再把密码数据还原成原来的数据,幸运的是,PHP通过Mcrypt扩展库的形式提供了这种可能性。 Mcrypt Mcrypt 2.5.7 Unix | Win32 Mcrypt 2.4.7是一个功能强大的加密算法扩展库,它包括有22种算法,其中就包括下面的几种算法: Blowfish RC2 Safer-sk64 xtea Cast-256 RC4 Safer-sk128 DES RC4-iv Serpent Enigma Rijndael-128 Threeway Gost Rijndael-192 TripleDES LOKI97 Rijndael-256 Twofish PanamaSaferplus Wake 安装: 在标准的PHP软件包中不包括Mcrypt,因此需要下载它,下载的地址为:ftp://argeas.cs-net.gr/pub/unix/mcrypt/。下载后,按照下面的方法进行编译,并把它扩充在PHP中: 下载Mcrypt软件包。 gunzipmcrypt-x.x.x.tar.gz tar -xvfmcrypt-x.x.x.tar ./configure --disable-posix-threads make make install cd to your PHP directory. ./configure -with-mcrypt=[dir] [--other-configuration-directives] make make install 当然了,根据你的要求和PHP安装时与互联网服务器软件的关系,上面的过程可能需要作适当的修改。 使用Mcrypt Mcrypt的优点不仅仅在于其提供的加密算法较多,还在于它可以对数据进行加/解密处理,此外,它还提供了35种处理数据用的函数。尽管对这些函数进行详细介绍已经超出了这篇文章的范围,我还是要就几个典型的函数作一下简要的介绍。 首先,我将介绍如何使用Mcrypt扩展库对数据进行加密,然后再介绍如何使用它进行解密。下面的代码对这一过程进行了演示,首先是对数据进行加密,然后在浏览器上显示加密后的数据,并将加密后的数据还原为原来的字符串,将它显示在浏览器上。 使用Mcrypt对数据进行加、解密 <?php
// Designate string to be encrypted
= "Applied Cryptography, by Bruce Schneier, is
a wonderful cryptography reference.";
// Encryption/decryption key
key = "Four score and twenty years ago";
// Encryption Algorithm
= MCRYPT_RIJNDAEL_128;
// Create the initialization vector for added security.
= mcrypt_create_iv(mcrypt_get_iv_size(,
MCRYPT_MODE_ECB), MCRYPT_RAND);
// Output original string
print "Original string: <p>";
// Encrypt
= mcrypt_encrypt(, key,
, MCRYPT_MODE_CBC, );
// Convert to hexadecimal and output to browser
print "Encrypted string: ".bin2hex()."<p>";
= mcrypt_decrypt(, key,
, MCRYPT_MODE_CBC, );
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扩展库 http://sourceforge.net/projects/mhash/ 0.8.3版的Mhash扩展库支持12种混编算法,仔细检查Mhash v.0.8.3的头文件mhash.h可以知道,它支持下面的混编算法: CRC32 HAVAL160 MD5 CRC32B HAVAL192 RIPEMD160 GOST HAVAL224 SHA1 HAVAL128 HAVAL256 TIGER 安装 象Mcrypt一样,Mhash也没有包括在PHP软件包中,对于非Windows用户而言,下面是安装过程: 下载Mhash扩展库 gunzipmhash-x.x.x.tar.gz tar -xvfmhash-x.x.x.tar ./configure make make install cd <PHP所在的目录> ./configure -with-mhash=[dir] [--other-configuration-directives] make make install 象Mcrypt一样,根据PHP在互联网服务器软件上的安装方式,可能需要对Mhash进行其他的配置。 对于Windows用户而言,http://www.php4win.de中有一个很好的包括Mhash扩展库在内的PHP软件包。只要下载并进行解压缩,然后根据其中的readme.first文档中的指令进行安装即可。 使用Mhash 对信息进行混编非常简单,看一下下面的例子: <?php
= MHASH_TIGER;
= "These are the directions to the secret fort. Two steps left, three steps right, and cha chacha.";
= mhash(, );
print "The hashed message is ". bin2hex();
?> 执行这一段脚本程序将得到下面的输出结果:The hashed message is 07a92a4db3a4177f19ec9034ae5400eb60d1a9fbb4ade461 在这里使用bin2hex()函数的目的是方便我们理解的输出,这是因为混编的结果是二进制格式,为了能够将它转化为易于理解的格式,必须将它转换为十六进制格式。 需要注意的是,混编是单向功能,其结果不依赖输入,因此可以公开显示这一信息。这一策略通常用于让用户比较下载文件和系统管理员提供的文件,以确保文件的完整性。 Mhash还有其他一些有用的函数。例如,我需要输出一个Mhash支持的算法的名字,由于Mhash支持的所有算法的名字都以MHASH_开头,因此,可以通过执行如下的代码完成这一任务: <?php
= MHASH_TIGER;
print "This data has been hashed with the".mhash_get_hash_name()."hashing algorithm.";
?> 得到的输出是:This data has been hashed with the TIGER hashing algorithm. 关于PHP和加密最后需要注意的一个问题 关于PHP和加密需要注意的最后的一个重要问题是在服务器和客户端之间传输的数据在传输过程中是不安全的!PHP是一种服务器端技术,不能阻止数据在传输过程中泄密。因此,如果想实现一个完整的安全应用,建议选用Apache-SSL或其他的安全服务器布置。 结论 这篇文章介绍了PHP最有用的功能之一━━数据加密,不仅讨论了PHP内置的crypt() 和md5()加密函数,还讨论了用于数据加密的功能强大的扩展库━━Mcrypt和Mhash。在这篇文章最后,我需要指出的是,一个真正安全的PHP应用还应该包括安全的服务器,由于PHP是一种服务器端的技术,因此,在数据由客户端向服务器端进行传输时,它不能保证数据的安全。责任编辑:小李
[2]PHP中的加密功能
来源: 互联网 发布时间: 2013-11-30
数据加密在我们生活中的地位已经越来越重要了,尤其是考虑到在网络上发生的大量交易和传输的大量数据。如果对于采用安全措施有兴趣的话,也一定会有兴趣了解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 $1$ CRYPT_BLOWFISH 16-character beginning with $2$ 用crypt()实现用户身份验证 作为crypt()函数的一个例子,考虑这样一种情况,你希望创建一段PHP脚本程序限制对一个目录的访问,只允许能够提供正确的用户名和口令的用户访问这一目录。我将把资料存储在我喜欢的数据库MySQL的一个表中。下面我们以创建这个被称作members的表开始我们的例子: mysql>CREATE TABLE members (
->username CHAR(14) NOT NULL,
->password CHAR(32) NOT NULL,
->PRIMARY KEY(username)
->); 然后,我们假定下面的数据已经存储在该表中: 用户名 密码 clark keloD1C377lKE bruce ba1T7vnz9AWgk peter paLUvRWsRLZ4U 这些加密的口令对应的明码分别是kent、banner和parker。注意一下每个口令的前二个字母,这是因为我使用了下面的代码,根据口令的前二个字母创建干扰串的: $enteredPassword.
$salt = substr($enteredPassword, 0, 2);
$userPswd = crypt($enteredPassword, $salt);
// $userPswd然后就和用户名一起存储在MySQL中 我将使用Apache的口令-应答认证配置提示用户输入用户名和口令,一个鲜为人知的有关PHP的信息是,它可以把Apache的口令-应答系统输入的用户名和口令识别为$PHP_AUTH_USER和$PHP_AUTH_PW,我将在身份验证脚本中用到这二个变量。花一些时间仔细阅读下面的脚本,多注意一下其中的解释,以便更好地理解下面的代码: crypt()和Apache的口令-应答验证系统的应用 <?php
$host = "localhost";
$user = "zorro";
$pswd = "hellodolly";
$db = "users";
// Set authorization to False
$authorization = 0;
// Verify that user has entered username and password
if (isset($PHP_AUTH_USER) && isset($PHP_AUTH_PW)) :
mysql_pconnect($host, $user, $pswd) or die("Can't connect to MySQL
server!");
mysql_select_db($db) or die("Can't select database!");
// Perform the encryption
$salt = substr($PHP_AUTH_PW, 0, 2);
$encrypted_pswd = crypt($PHP_AUTH_PW, $salt);
// Build the query
$query = "SELECT username FROM members WHERE
username = '$PHP_AUTH_USER' AND
password = '$encrypted_pswd'";
// Execute the query
if (mysql_numrows(mysql_query($query)) == 1) :
$authorization = 1;
endif;
endif;
// confirm authorization
if (! $authorization) :
header('WWW-Authenticate: Basic realm="Private"');
header('HTTP/1.0 401 Unauthorized');
print "You are unauthorized to enter this area.";
exit;
else :
print "This is the secret data!";
endif;
?> 上面就是一个核实用户访问权限的简单身份验证系统。在使用crypt()保护重要的机密资料时,记住在缺省状态下使用的crypt()并不是最安全的,只能用在对安全性要求较低的系统中,如果需要较高的安全性能,就需要我在本篇文章的后面介绍的算法。 下面我将介绍另一个PHP支持的函数━━md5(),这一函数使用MD5散列算法,它有几种很有趣的用法值得一提: 混编 一个混编函数可以将一个可变长度的信息变换为具有固定长度被混编过的输出,也被称作“信息文摘”。这是十分有用的,因为一个固定长度的字符串可以用来检查文件的完整性和验证数字签名以及用户身份验证。由于它适合于PHP,PHP内置的md5()混编函数将把一个可变长度的信息转换为128位(32个字符)的信息文摘。混编的一个有趣的特点是不能通过分析混编后的信息得到原来的明码,因为混编后的结果与原来的明码内容没有依赖关系。 即便只改变一个字符串中的一个字符,也将使得MD5混编算法计算出二个截然不同的结果。我们首先来看下表的内容及其相应的结果: 使用md5()混编字符串 <?php
$msg = "This is some message that I just wrote";
$enc_msg = md5($msg);
print "hash: $enc_msg ";
?> 结果:hash: 81ea092649ca32b5ba375e81d8f4972c 注意,结果的长度为32个字符。再来看一下下面的表,其中的$msg的值有了一点微小的变化: 使用md5()对一个稍微变化的字符串进行混编 <?php
//注意,message中少了一个s
$msg = "This is some mesage that I just wrote";
$enc_msg = md5($msg);
print "hash2: $enc_msg <br /><br />";
?> 结果:hash2: e86cf511bd5490d46d5cd61738c82c0c 可以发现,尽管二个结果的长度都是32个字符,但明文中一点微小的变化使得结果发生了很大的变化,因此,混编和md5()函数是检查数据中微小变化的一个很好的工具。 尽管crypt()和md5()各有用处,但二者在功能上都受到一定的限制。在下面的部分中,我们将介绍二个非常有用的被称作Mcrypt和Mhash的PHP扩展,将大大拓展PHP用户在加密方面的选择。 尽管我们在上面的小节中说明了单向加密的重要性,但有时我们可能需要在加密后,再把密码数据还原成原来的数据,幸运的是,PHP通过Mcrypt扩展库的形式提供了这种可能性。 Mcrypt Mcrypt 2.5.7 Unix | Win32 Mcrypt 2.4.7是一个功能强大的加密算法扩展库,它包括有22种算法,其中就包括下面的几种算法: Blowfish RC2 Safer-sk64 xtea Cast-256 RC4 Safer-sk128 DES RC4-iv Serpent Enigma Rijndael-128 Threeway Gost Rijndael-192 TripleDES LOKI97 Rijndael-256 Twofish PanamaSaferplus Wake 安装: 在标准的PHP软件包中不包括Mcrypt,因此需要下载它,下载的地址为:ftp://argeas.cs-net.gr/pub/unix/mcrypt/。下载后,按照下面的方法进行编译,并把它扩充在PHP中: 下载Mcrypt软件包。 gunzipmcrypt-x.x.x.tar.gz tar -xvfmcrypt-x.x.x.tar ./configure --disable-posix-threads make make install cd to your PHP directory. ./configure -with-mcrypt=[dir] [--other-configuration-directives] make make install 当然了,根据你的要求和PHP安装时与互联网服务器软件的关系,上面的过程可能需要作适当的修改。 使用Mcrypt Mcrypt的优点不仅仅在于其提供的加密算法较多,还在于它可以对数据进行加/解密处理,此外,它还提供了35种处理数据用的函数。尽管对这些函数进行详细介绍已经超出了这篇文章的范围,我还是要就几个典型的函数作一下简要的介绍。 首先,我将介绍如何使用Mcrypt扩展库对数据进行加密,然后再介绍如何使用它进行解密。下面的代码对这一过程进行了演示,首先是对数据进行加密,然后在浏览器上显示加密后的数据,并将加密后的数据还原为原来的字符串,将它显示在浏览器上。 使用Mcrypt对数据进行加、解密 <?php
// Designate string to be encrypted
$string = "Applied Cryptography, by Bruce Schneier, is
a wonderful cryptography reference.";
// Encryption/decryption key
$key = "Four score and twenty years ago";
// Encryption Algorithm
$cipher_alg = MCRYPT_RIJNDAEL_128;
// Create the initialization vector for added security.
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,
MCRYPT_MODE_ECB), MCRYPT_RAND);
// Output original string
print "Original string: $string <p>";
// Encrypt $string
$encrypted_string = mcrypt_encrypt($cipher_alg, $key,
$string, MCRYPT_MODE_CBC, $iv);
// Convert to hexadecimal and output to browser
print "Encrypted string: ".bin2hex($encrypted_string)."<p>";
$decrypted_string = mcrypt_decrypt($cipher_alg, $key,
$encrypted_string, MCRYPT_MODE_CBC, $iv);
print "Decrypted string: $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扩展库 http://sourceforge.net/projects/mhash/ 0.8.3版的Mhash扩展库支持12种混编算法,仔细检查Mhash v.0.8.3的头文件mhash.h可以知道,它支持下面的混编算法: CRC32 HAVAL160 MD5 CRC32B HAVAL192 RIPEMD160 GOST HAVAL224 SHA1 HAVAL128 HAVAL256 TIGER 安装 象Mcrypt一样,Mhash也没有包括在PHP软件包中,对于非Windows用户而言,下面是安装过程: 下载Mhash扩展库 gunzipmhash-x.x.x.tar.gz tar -xvfmhash-x.x.x.tar ./configure make make install cd <PHP所在的目录> ./configure -with-mhash=[dir] [--other-configuration-directives] make make install 象Mcrypt一样,根据PHP在互联网服务器软件上的安装方式,可能需要对Mhash进行其他的配置。 对于Windows用户而言,http://www.php4win.de中有一个很好的包括Mhash扩展库在内的PHP软件包。只要下载并进行解压缩,然后根据其中的readme.first文档中的指令进行安装即可。 使用Mhash 对信息进行混编非常简单,看一下下面的例子: <?php
$hash_alg = MHASH_TIGER;
$message = "These are the directions to the secret fort. Two steps left, three steps right, and cha chacha.";
$hashed_message = mhash($hash_alg, $message);
print "The hashed message is ". bin2hex($hashed_message);
?> 执行这一段脚本程序将得到下面的输出结果:The hashed message is 07a92a4db3a4177f19ec9034ae5400eb60d1a9fbb4ade461 在这里使用bin2hex()函数的目的是方便我们理解$hashed_message的输出,这是因为混编的结果是二进制格式,为了能够将它转化为易于理解的格式,必须将它转换为十六进制格式。 需要注意的是,混编是单向功能,其结果不依赖输入,因此可以公开显示这一信息。这一策略通常用于让用户比较下载文件和系统管理员提供的文件,以确保文件的完整性。 Mhash还有其他一些有用的函数。例如,我需要输出一个Mhash支持的算法的名字,由于Mhash支持的所有算法的名字都以MHASH_开头,因此,可以通过执行如下的代码完成这一任务: <?php
$hash_alg = MHASH_TIGER;
print "This data has been hashed with the".mhash_get_hash_name($hashed_message)."hashing algorithm.";
?> 得到的输出是:This data has been hashed with the TIGER hashing algorithm. 关于PHP和加密最后需要注意的一个问题 关于PHP和加密需要注意的最后的一个重要问题是在服务器和客户端之间传输的数据在传输过程中是不安全的!PHP是一种服务器端技术,不能阻止数据在传输过程中泄密。因此,如果想实现一个完整的安全应用,建议选用Apache-SSL或其他的安全服务器布置。 结论 这篇文章介绍了PHP最有用的功能之一━━数据加密,不仅讨论了PHP内置的crypt() 和md5()加密函数,还讨论了用于数据加密的功能强大的扩展库━━Mcrypt和Mhash。在这篇文章最后,我需要指出的是,一个真正安全的PHP应用还应该包括安全的服务器,由于PHP是一种服务器端的技术,因此,在数据由客户端向服务器端进行传输时,它不能保证数据的安全。
[3]PHP编程网上资源导航
来源: 互联网 发布时间: 2013-11-30
一、PHP简介 引用PHP(Hgpertext Preprocessor或Personal Home Page Tools)的官方站点www.php.net的定义来说,PHP是一种服务器端、跨平台、HTML嵌入式的脚本语言。其实,它和大家所熟知的ASP一样,是一门常用于Web编程的语言。PHP酝酿于1994年,1995年发布其第一个公开版本,截止目前已发布的最新版本为PHP4.05。 PHP是一种免费软件,它能运行在包括Windows、Linux等在内的绝大多数操作系统环境中,常与免费Web服务软件Apache和免费数据库Mysql配合使用于Linux平台上,具有最高的性能价格比,号称“黄金组合”。 也许PHP最强大和最重要的特征是它的数据库支持,目前其支持范围覆盖了包括Oracle、Sybase、MySQL、ODBC等在内的大多数常见数据库。使用它编写一个含有数据库功能的网页程序变得十分简单。 PHP发展到PHP 3.0的时候有相当长的一段稳定时期,因此很多PHP应用仍然以PHP3为扩展名,现在的系统大多已经逐渐升级到PHP 4.0以上,使用PHP作为扩展名;而PHP与Apache组合使用时,通常会使用PHTML为扩展名,因此,我们在网络上很容易辨别PHP系统。 二、网上学习PHP PHP是生于网络、用于网络、发展于网络的一门语言。它一诞生就被打上了自由发展的烙印。目前在国内外有数以千计的个人和组织的网站在以各种形式、各种语言学习、发展和完善它,并不断地公布最新的应用和研究成果。我们能够在网上利用搜索引擎等工具在PHP的官方和众多民间网站上很便捷、廉价地找到丰富的学习、研究资料和软件乃至BBS等交流场所,使我们能紧密地关注它的发展,随时观察最新的领域动态。这一切,对于PHP本身,对于我们这些关心WEB开发的编程爱好者来说,无疑都是一笔巨大的财富。 三、PHP学习网站、论坛游 随着PHP在国内外的日渐风行,PHP在国内的学习和研究也逐渐掀起热潮,涌现出大批高质量的PHP技术中文网站。为倡导网络技术的本地化,我们将着重介绍中文PHP技术网站。 1.www.php.net PHP官方网站(英文) 不论你是初学还是精通,这个PHP的大本营是必然拜访之地。在这里我们能找到关于PHP的最新消息和软件版本。就连那些PHP高手也无不常常造访而获取最新信息。如果你的英文不成问题,你就能在这里找到几乎关于PHP的一切,包括英文等文字的手册、批注、软件源代码甚至已经发现的BUG等。 2.www.zend.com Zend官方网站(英文) Zend是PHP的商业用加速器。因此除了Zend本身,该网站完全为PHP服务。它具有丰富的资料、代码资源。其论坛内容也相当丰富,可以看出发言者夹杂着以英文为主的各色方言,是全球PHP爱好者求医问药的好去处。如果你有疑难杂症,不妨来此一试。同时,由于这里也是研究PHP的鼻祖,许多问题的答案也许就在论坛的历史记录里,找找看吧。 3.www.phpuser.com PHP中文网站 这是较早的PHP技术网站之一。页面设计简洁,版块清晰明朗。设置文章教程、论坛、安装指南、程序代码、相关下载等栏目,并支持注册用户上传文章、资料。网站内容丰富。论坛较为活跃,潜伏着多路PHP高手。 4. www.phpease.com PHP易站 号称PHP开发者的驿站。搜集了相当多的PHP代码、文章,的确是PHP开发者查阅参考资料的好地方,同时很多文章也非常适合初学者。 5. www.phpx.com 中国PHP联盟 由国内较早的PHP技术网站——“闹着玩工作室”个人主页演变而来,并由几位PHP技术高手支持,其网站页面相对平直,但是其论坛由于几路玩家的支持,让不少PHP爱好者趋之若骛。 其他较为专业的网站还有中国PHP网站(chinaphp.com)、PHP世纪网(php2000.com)、PHP之星(phpstar.com)等。 6.如果上述介绍的几个专业网站让PHP的初学者望而却步、无从下手的话,那么笔者再介绍几个界面相对柔和,气氛相对轻松的学习网站。 cgreen.363.net PHP入门者园地 这是PHP爱好者东方一蛇的老家。东方一蛇一直活跃在许多PHP论坛中,并发表了很多原创文章。这里有很多基础知识,学习PHP,就从这里起步吧(图4)。 php.silversand.net PHP资源网 这里的内容也很简单,但都是一些入门必需的资料和软件,直接了当,没有那么多奢华的修饰,也许很适合你呢。 最后,我想再推荐一个非比寻常的论坛http://www.chinaasp.com/php/。他可以说是国内论坛在技术和形式及概念上的领导者。他的技术论坛在国内具有相当的影响力,拥有众多版面,涵盖了大多数流行的网络技术;聚集着大批在网络开发上具有特长的爱好者,当然也包括PHP。由于Web开发涉及到DHTML、数据库、网络安全等一系列相关内容,所以ChinaASP论坛至今仍是一个在形式上具有特色、内容上相当丰富而全面的技术交流场所。你一定会不虚此行(图5)。 四、PHP学习工具下载 学习PHP,最主要的莫过于搭建实验环境和熟悉语法函数了。所以学习工具就有了两大块。 (一)下载PHP及相关软件 搭建PHP环境涉及到系统平台、Web服务软件和数据库软件及PHP本身。根据我们现有计算机软、硬件环境,我们可以自由选择相应的软件。通常我们会选择Windows98/NT为实验平台,这样我们可以下载PHP4.0以上的Windows版本,数据库可以下载Mysql的Windows版本(www.mysql.org)或者使用微软的MSSQL,Web服务软件可以直接使用Windows98的PWS或者Windows NT的IIS,想专业些可以下载Apache的Windows版本(www.apache.com)。如果你想搭建Linux下运行的实战环境,那么所有这些软件必须下载其对应于Linux的版本,有的可能需要在Linux下编译生成,有许多文章都有介绍。 (二)下载PHP用户手册 用户手册是学习PHP的“杀手锏”,许多PHP的高手仍然随时备查。手册通常为PHP4.0,有中、英文版本,中文版中还有HTML、ZIP和CHM几种格式。很多网站都有下载。建议下载CHM格式,查阅较为方便。 另外值得一提的就是使用PHP的Mysql管理工具-phpMyadmin,如果你要使用Mysql做你的数据库,那么你一定会用到、而且喜欢这个工具的。在phpwizard.net上可以下载。 五、PHP的源代码资源 一般来说,在国内网站已经能找到相当多的源代码资源。但是无庸质疑的是,PHP的祖先是在国外,我们的很多开发和研究都是以他们的成果为基础的,所以,真正优秀而且全面的源代码等资源还是国外的网站上比较多。 www.phpbuilder.com 非常知名的PHP技术专业网站。页面清晰明朗,对文章、源代码有详细分类,是PHP爱好者淘金的好去处。 www.weberdev.com 分类更为细腻,达80种之多。对使用PHP进行Web开发所涉及到的常用技术Mysql、JavaScript等也同时列表,非常方便, www.hotscripts.com 非常全面的一个Web技术网站,囊括了现今所有主流Web开发技术,有相当丰富的文章和源代码,并附有评注等级,非常直观。 六、PHP免费空间 支持PHP系统的免费主页空间目前也逐渐增多了,但是随着用户数量的激增和主页内容的混乱,很多网站又纷纷减少和关闭空间,因此,真正能使用的高速PHP免费空间还有待大家更多地去发掘。 www.51.net北京虎翼网 20M空间,速度较快,不支持Mysql。有弹出式广告窗口,同时可以申请yourname.51.net域名。 大家可要把握机会哦!一、PHP简介 引用PHP(Hgpertext Preprocessor或Personal Home Page Tools)的官方站点www.php.net的定义来说,PHP是一种服务器端、跨平台、HTML嵌入式的脚本语言。其实,它和大家所熟知的ASP一样,是一门常用于Web编程的语言。PHP酝酿于1994年,1995年发布其第一个公开版本,截止目前已发布的最新版本为PHP4.05。 PHP是一种免费软件,它能运行在包括Windows、Linux等在内的绝大多数操作系统环境中,常与免费Web服务软件Apache和免费数据库Mysql配合使用于Linux平台上,具有最高的性能价格比,号称“黄金组合”。 也许PHP最强大和最重要的特征是它的数据库支持,目前其支持范围覆盖了包括Oracle、Sybase、MySQL、ODBC等在内的大多数常见数据库。使用它编写一个含有数据库功能的网页程序变得十分简单。 PHP发展到PHP 3.0的时候有相当长的一段稳定时期,因此很多PHP应用仍然以PHP3为扩展名,现在的系统大多已经逐渐升级到PHP 4.0以上,使用PHP作为扩展名;而PHP与Apache组合使用时,通常会使用PHTML为扩展名,因此,我们在网络上很容易辨别PHP系统。 二、网上学习PHP PHP是生于网络、用于网络、发展于网络的一门语言。它一诞生就被打上了自由发展的烙印。目前在国内外有数以千计的个人和组织的网站在以各种形式、各种语言学习、发展和完善它,并不断地公布最新的应用和研究成果。我们能够在网上利用搜索引擎等工具在PHP的官方和众多民间网站上很便捷、廉价地找到丰富的学习、研究资料和软件乃至BBS等交流场所,使我们能紧密地关注它的发展,随时观察最新的领域动态。这一切,对于PHP本身,对于我们这些关心WEB开发的编程爱好者来说,无疑都是一笔巨大的财富。 三、PHP学习网站、论坛游 随着PHP在国内外的日渐风行,PHP在国内的学习和研究也逐渐掀起热潮,涌现出大批高质量的PHP技术中文网站。为倡导网络技术的本地化,我们将着重介绍中文PHP技术网站。 1.www.php.net PHP官方网站(英文) 不论你是初学还是精通,这个PHP的大本营是必然拜访之地。在这里我们能找到关于PHP的最新消息和软件版本。就连那些PHP高手也无不常常造访而获取最新信息。如果你的英文不成问题,你就能在这里找到几乎关于PHP的一切,包括英文等文字的手册、批注、软件源代码甚至已经发现的BUG等。 2.www.zend.com Zend官方网站(英文) Zend是PHP的商业用加速器。因此除了Zend本身,该网站完全为PHP服务。它具有丰富的资料、代码资源。其论坛内容也相当丰富,可以看出发言者夹杂着以英文为主的各色方言,是全球PHP爱好者求医问药的好去处。如果你有疑难杂症,不妨来此一试。同时,由于这里也是研究PHP的鼻祖,许多问题的答案也许就在论坛的历史记录里,找找看吧。 3.www.phpuser.com PHP中文网站 这是较早的PHP技术网站之一。页面设计简洁,版块清晰明朗。设置文章教程、论坛、安装指南、程序代码、相关下载等栏目,并支持注册用户上传文章、资料。网站内容丰富。论坛较为活跃,潜伏着多路PHP高手。 4. www.phpease.com PHP易站 号称PHP开发者的驿站。搜集了相当多的PHP代码、文章,的确是PHP开发者查阅参考资料的好地方,同时很多文章也非常适合初学者。 5. www.phpx.com 中国PHP联盟 由国内较早的PHP技术网站——“闹着玩工作室”个人主页演变而来,并由几位PHP技术高手支持,其网站页面相对平直,但是其论坛由于几路玩家的支持,让不少PHP爱好者趋之若骛。 其他较为专业的网站还有中国PHP网站(chinaphp.com)、PHP世纪网(php2000.com)、PHP之星(phpstar.com)等。 6.如果上述介绍的几个专业网站让PHP的初学者望而却步、无从下手的话,那么笔者再介绍几个界面相对柔和,气氛相对轻松的学习网站。 cgreen.363.net PHP入门者园地 这是PHP爱好者东方一蛇的老家。东方一蛇一直活跃在许多PHP论坛中,并发表了很多原创文章。这里有很多基础知识,学习PHP,就从这里起步吧(图4)。 php.silversand.net PHP资源网 这里的内容也很简单,但都是一些入门必需的资料和软件,直接了当,没有那么多奢华的修饰,也许很适合你呢。 最后,我想再推荐一个非比寻常的论坛http://www.chinaasp.com/php/。他可以说是国内论坛在技术和形式及概念上的领导者。他的技术论坛在国内具有相当的影响力,拥有众多版面,涵盖了大多数流行的网络技术;聚集着大批在网络开发上具有特长的爱好者,当然也包括PHP。由于Web开发涉及到DHTML、数据库、网络安全等一系列相关内容,所以ChinaASP论坛至今仍是一个在形式上具有特色、内容上相当丰富而全面的技术交流场所。你一定会不虚此行(图5)。 四、PHP学习工具下载 学习PHP,最主要的莫过于搭建实验环境和熟悉语法函数了。所以学习工具就有了两大块。 (一)下载PHP及相关软件 搭建PHP环境涉及到系统平台、Web服务软件和数据库软件及PHP本身。根据我们现有计算机软、硬件环境,我们可以自由选择相应的软件。通常我们会选择Windows98/NT为实验平台,这样我们可以下载PHP4.0以上的Windows版本,数据库可以下载Mysql的Windows版本(www.mysql.org)或者使用微软的MSSQL,Web服务软件可以直接使用Windows98的PWS或者Windows NT的IIS,想专业些可以下载Apache的Windows版本(www.apache.com)。如果你想搭建Linux下运行的实战环境,那么所有这些软件必须下载其对应于Linux的版本,有的可能需要在Linux下编译生成,有许多文章都有介绍。 (二)下载PHP用户手册 用户手册是学习PHP的“杀手锏”,许多PHP的高手仍然随时备查。手册通常为PHP4.0,有中、英文版本,中文版中还有HTML、ZIP和CHM几种格式。很多网站都有下载。建议下载CHM格式,查阅较为方便。 另外值得一提的就是使用PHP的Mysql管理工具-phpMyadmin,如果你要使用Mysql做你的数据库,那么你一定会用到、而且喜欢这个工具的。在phpwizard.net上可以下载。 五、PHP的源代码资源 一般来说,在国内网站已经能找到相当多的源代码资源。但是无庸质疑的是,PHP的祖先是在国外,我们的很多开发和研究都是以他们的成果为基础的,所以,真正优秀而且全面的源代码等资源还是国外的网站上比较多。 www.phpbuilder.com 非常知名的PHP技术专业网站。页面清晰明朗,对文章、源代码有详细分类,是PHP爱好者淘金的好去处。 www.weberdev.com 分类更为细腻,达80种之多。对使用PHP进行Web开发所涉及到的常用技术Mysql、JavaScript等也同时列表,非常方便, www.hotscripts.com 非常全面的一个Web技术网站,囊括了现今所有主流Web开发技术,有相当丰富的文章和源代码,并附有评注等级,非常直观。 六、PHP免费空间 支持PHP系统的免费主页空间目前也逐渐增多了,但是随着用户数量的激增和主页内容的混乱,很多网站又纷纷减少和关闭空间,因此,真正能使用的高速PHP免费空间还有待大家更多地去发掘。 www.51.net北京虎翼网 20M空间,速度较快,不支持Mysql。有弹出式广告窗口,同时可以申请yourname.51.net域名。 大家可要把握机会哦!
最新技术文章: