用户名:  密码:   
您当前的位置:首页 > 网页设计 >  PHP > 

第15讲 crypt(),md5()和sha1()函数语法与举例,扩展库Mcrypt()和Mhash()安装配置与应用举例

上次修改时间: 2016-03-04 14:59:08      来源:网络总结      作者:钢铁长陈
上一页      路径:DSD\Learn\PHP相关\PHP入门到精通笔记\      下一页

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;