= "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是一种服务器端的技术,因此,在数据由客户端向服务器端进行传输时,它不能保证数据的安全。责任编辑:小李
步旅网还为您提供以下相关内容希望对您有帮助:
在PHP里实现AES的加密解密功能(包括mcrypt版本和openssl版本)_百度...
使用openssl加密解密,只需安装扩展并选择AES-256-CBC方法,自动处理补位逻辑。另一方面,mcrypt扩展适用于PHP7.1以下版本,默认使用AES-128-CBC方法。实现AES加密,需准备原数据、AES私钥和令牌。加密解密过程需注意使用对应方法。对比两者,openssl版本更高效、代码简洁。福哥推荐使用openssl实现AES加密解密。
PHP 加密(哈希) Md5
在PHP中,数据安全是至关重要的,其中哈希和加密算法是常见的保护手段。首先,让我们关注对称加密,也称私钥加密。它使用单一密钥进行加密和解密,如DES、3DES等,速度较快,适合处理大量数据,但其核心问题在于密钥管理,一旦私钥泄露,数据便面临破解风险,因此对称加密在密钥安全上面临挑战。然后是更为安全...
说说PHP 代码加密实践
总结加密解密过程,从设定CAKEY密钥、MD5运算、CBC加密到解密和临时文件处理。screw-plus扩展的优点包括简单易用的加密解密功能和开源免费的特性。然而,安全性依赖于CAKEY的保护。如果CAKEY泄露,将允许解密文件内容。通过加壳、压缩和混淆等技术,可以增加追踪难度。同时,可以对CAKEY进行复杂计算,增加安全性。
php 加密哪个好
3. 广泛支持:AES加密得到了广泛的支持,不仅在PHP中有成熟的实现,而且在其他编程语言和系统中也有良好的支持。这使得在不同系统之间传输加密数据时,具有较高的兼容性。因此,在PHP中进行数据加密时,推荐使用AES加密。当然,除了选择合适的加密算法,还需要注意密钥的管理和保护,确保加密的安全性。
php源代码保护——PHP加密方案分析&解密还原
ZendGuard_、_SourceGuardian_、_IonCube_等,常通过修改引擎或直接操作opcode来增加保护,这些方法更难直接还原源代码。结论在选择PHP源码保护时,应优先考虑opcode或虚拟机方案,如仅使用混淆,虽然能增加阅读难度,但一旦加密扩展被获取,保护效果有限。确保加密扩展的安全性是关键。
php基于openssl加密解密、验证技巧
解密流程:1. 使用已知密钥和加密算法对密文进行解密,恢复原始信息。以上是简化SSL加密与验证的关键点,通过明确步骤与代码逻辑,实现简单而有效率的加密与验证过程。PHP与 OpenSSL 环境下的安全通信,不仅提高了数据传输的安全性,且在实践中简化了操作与应用。关注公众号:PHP开源社区,获取更多PHP大厂面试...
如何给php代码加密
因此,SVN服务器上需统一存放明文文件。则通过服务器白名单功能实现对终端电脑数据进行强制透明加密,对上传到应用服务器数据实现上传自动解密、下载自动加密。再配合应用服务器安全接入系统实现只有安装了加密客户端的Windows、Linux、MAC端才能够正常的访问公司内部的SVN服务器。德人合科技为客户提供优质的内网...
php源码怎么加密
首先 ,我们把这段代码变为通过eval执行的 <?php eval('echo "hello world";');然后 ,我们再进行一些转换,比如说base64编码 <?php eval(base64_decode('ZWNobyAiaGVsbG8gd29ybGQiOw=='));就这样子,我们的第一个加密过的php代码新鲜出炉了。。。上面这个例子非常非常简单,基本上任何有一点...
总结一下PHP中有哪些加密算法技术
1. MD5加密 string md5 ( string $str [, bool $raw_output = false ] )2. Crype加密 string crypt ( string $str [, string $salt ] )crypt() 返回一个基于标准 UNIX DES 算法或系统上其他可用的替代算法的散列字符串。3. Sha1加密 string sha1 ( string $str [, bool $raw_output...
php怎样用Zend Guard加密
zend guard加密使用方法 首先,我们把PHP保护神请回家,从网上下载后,运行安装包,一路点击Next(下一步)即可安装好。接下来让我们准备一个简单的PHP程序test.php,用来测试能否被Zend Guard保护起来。test.php的代码如下:<?phpinfo();?> 打开Zend Guard,从File(文件)菜单点击,新建一个项目,。