

crypt(),md5()和sha1()函数语法与举例,扩展库Mcrypt()和Mhash()安装配置与应用举例
15.1 加密技术概述
原理:把明文的用某种算法处理成不可读的密文以保护数据不被非法窃取
PHP中的加密函数有crypt(),md5()和sha1(),还有加密扩展库Mcrypt和Mhash
15.2 PHP加密函数
1) crypt()函数,可完成单向加密
语法:string crypt(string str[, string salt]);
//str为要加密的字串,salt为加密时使用的干扰串,如省略则随机生成干扰串
//默认php使用2字符的DES干扰串,使用md5则使用12字符,可用CRYPT_SALT_LENGTH变量查看当前干扰串长度
$str = 'This is an example!';
echo '加密前$str的值为:'.$str;
$crypttostr = crypt($str); //加密变量str
echo '<p>加密后$str的值为:'.$crypttostr;
2) md5()函数,语法:string md5(string str [, bool raw_output] );
//str为要加密的字串,raw_output为值为返回一二进制密文,该值默认为false
3) sha1()函数,和md5函数类似,全称Secure Hash Algorithm
语法:string sha1 ( string str[,bool raw_output]);
//用法同md5函数,参数raw_output为默认为假时返回结果是40位的16进制数,若为真则返回20位2进制数
echo md5('PHPER')
echo sha1('PHPER');
15.3 PHP加密扩展库,除加密函数外,还有加密扩展库Mcrypt()和Mhash()
1) Mcrypt()扩展库
a. 安装方法(默认PHP包含该库但未安装):将PHP目录下的libmcrypt.dll文件复制到windows\system32下,再将php.ini文件
;extension = php_mcrypt.dll这句前的分号去掉重启服务器,用echo phpinfo()可查看安装成功否。
b. Mcrypt库支持20多种加密算法和8种加密模式,可通过mcrypt_list_algorithms()和mcrypt_list_modes()两函数查看
例子:
$en_dir = mcrypt_list_algorithms();
echo "Mcrypt支持的算法有:";
foreach($en_dir as $en_value) {
echo $en_value." ";
}
$mo_dir = mcrypt_list_modes();
echo "<p>Mcrypt支持的加密模式有:";
foreach($en_dir as $mo_value) {
echo $mo_value." ";
}
例2:
$str = "被加密的内容:相见时难别亦难 东风无力百花残";
$key = "key:111";
$cipher = MCRYPT_DES;
$modes = MCRYPT_MODE_ECB;
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$moders),MCRYPT_RAND);
echo "加密前:".$str."<p>";
$str_encrypt = mcrypt_encrypt($cipher,$key,$str,$modes,$iv);
echo "加密后:".$str_encrypt." <p>";
$str_decrypt = mcrypt_decrypt($cipher,$key,$str_encrypt,$modes,$iv);
echo "还原:".$str_decrypt;
2) Mhash()扩展库
a. 安装方法和Mcrypt()相同,复制libmhash.dll到system32下,改php.ini文件把;extension=php_mhash.dll前分号去掉保存重启,
安装成功也可用phpinfo()查看是否成功
b. 可用mhash_count()和mhash_get_hash_name()函数输出支持的算法名称
例1:
$num = mhash_count(); //返回最大的hash id
echo "Mhash库支持的算法有:";
for($i = 0; $i <= $num; $i++ {
echo $i."=>".mhash_get_hash_name($i)." ";
}
例2:
$filename = '07.txt';
$str = file_get_contents($filename);
$hash = 2;
$password = '111';
$salt = '1234';
$key = mhash_keygen_s2k(1,$password,$salt,10);
$str_mhash = bin2hex(mhash($hash,$str,$key));
echo "文件07.txt的校验码是: ".$str_mhash;