网站安全与PHP加密技术的应用研究
2016-05-14何志明
何志明
摘 要 随着互联网技术的发展,越来越多的PHP语言开发网站不断涌现,特别是网络上的大量交易和大量数据传输,PHP网站所暴漏出来的安全性问题也越来越突出,数据加密技术就显越来越重要了。
【关键词】网站安全;数据加密;PHP技术
1 PHP加密的基本原理
PHP是英文超文本处理语言Hypertext Preprocessor的缩写,是对文件或数据按某种加密算法进行计算处理,使其成为不可读的一段数字代码,通过这样的途径来达到保护数据不被非法窃取和阅读的目的。PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,现已被广泛地运用。
2 PHP的常用函数及其应用
2.1 不可逆的加密函数为:md5()、crypt()
md5() 用来计算 MD5 哈稀。语法为:string md5(string str);
crypt() 将字符串用 UNIX 的标准加密 DES 模块加密。这是单向的加密函数,无法解密。欲比对字符串,将已加密的字符串的头二个字符放在 salt 的参数中,再比对加密后的字符串。语法为:string crypt(string str, string [salt])。
2.2 可逆转的加密为:base64_encode()、urlencode() 相对应的解密函数:base64_decode() 、urldecode()
base64_encode() 将字符串以 MIME BASE64 编码。此编码方式可以让中文字或者图片也能在网络上顺利传输。语法为string base64_encode(string data); 它的解密函数为:string base64_decode(string encoded_data); 将复回原样。
urlencode() 将字符串以 URL 编码。例如空格就会变成加号。语法为:string urlencode(string str);
它的解密函数为:string urldecode(string str); 将复回原样。
2.3 加密/解密字符串函数应用举例
/**
* 可逆的字符串加密函数
* @param int $txtStream 待加密的字符串内容
* @param int $password 加密密码
* @return string 加密后的字符串
*/
public static function enCrypt($txtStream,$password){
//密锁串,不能出现重复字符,内有A-Z,a-z,0-9,/,=,+,_,
$lockstream = 'st=lDEFABCNOPyzghi_jQRST-UwxkVWXYZabcdef+IJK6/7nopqr89LMmGH012345uv';
//随机找一个数字,并从密锁串中找到一个密锁值
$lockLen = strlen($lockstream);
$lockCount = rand(0,$lockLen-1);
$randomLock = $lockstream[$lockCount];
//结合随机密锁值生成MD5后的密码
$password = md5($password.$randomLock);
//开始对字符串加密
$txtStream = base64_encode($txtStream);
$tmpStream = '';
$i=0;$j=0;$k = 0;
for ($i=0; $i $k = ($k == strlen($password)) ? 0 : $k; $j = (strpos($lockstream,$txtStream[$i])+$lockCount+ord($password[$k]))%($lockLen); $tmpStream .= $lockstream[$j]; $k++; } /** 3 PHP加密扩展库及应用 3.1 mhash扩展库 安装Mhash扩展库:首先把PHP目录下的libmhash.dll文件copy到系统目录下,然后在php.ini文件中找到”;extension=php_mhash.dll”将前面的分号去掉,最后重启服务器。 Mhash扩展库常量:Mhash扩展库支持MD5,SHA1,CRC32等多种散列算法,可以使用mhash_count()和mhash_get_hash_name()函数输出支持的算法名称。 Mhash扩展库应用:获取文件的全部内容:file_get_contents(文件名)。 3.2 Mcrypt()扩展库 安装Mcrypt()扩展库:首先把PHP目录下的libmcrypt.dll文件copy到系统目录下,然后在php.ini文件中找到”;extension=php_mcrypt.dll”将前面的分号去掉,最后重启服务器。 Mcrypt()扩展库常量:支持20多种加密算法和8种加密模式,可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来查看。 Mcrypt应用:初始化向量:mcrypt_create_iv(该向量的大小,向量的源(MCRYPT_RAND:取系统的随机数)) 获取到初始化向量的大小:mcrypt_create_iv_size(加密算法;加密模式); 加密:mcrypt_encrypt(加密算法,密钥,需要加密的数据,算法模式,向量); 解密:mcrypt_decrypt(加密算法,密钥,需要解密的数据,算法模式,向量)。 4 结语 PHP加密函数或加密库只是一种简单的阻止数据在传输过程中泄密方式, PHP不能阻止数据在传输过程中泄密,Mcrypt和Mhash扩展库则提供了更全面加密与解密方法。要想构建一个更加安全性的网站,需要将服务器与客户端间数据传输的安全性综合考虑,同时配合Apache-SSL等其它安全服务器使用,以便组建一个性能更加安全的网站系统。 作者单位 重庆三峡职业学院 重庆市 404155