PHP中加密解密函数与DES加密解密实例
本文实例讲述了PHP中加密解密函数与DES加密解密的应用,分享给大家供大家参考。具体如下:
例子,php加密解密的例子
加密函数:
/* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ functionpassport_encrypt($str,$key){//加密函数 srand((double)microtime()*1000000); $encrypt_key=md5(rand(0,32000)); $ctr=0; $tmp=''; for($i=0;$i<strlen($str);$i++){ $ctr=$ctr==strlen($encrypt_key)?0:$ctr; $tmp.=$encrypt_key[$ctr].($str[$i]^$encrypt_key[$ctr++]); } returnbase64_encode(passport_key($tmp,$key)); }
解密代码如下:
/* *功能:对字符串进行解密处理 *参数一:需要解密的密文 *参数二:密钥 */ functionpassport_decrypt($str,$key){//解密函数 $str=passport_key(base64_decode($str),$key); $tmp=''; for($i=0;$i<strlen($str);$i++){ $md5=$str[$i]; $tmp.=$str[++$i]^$md5; } return$tmp; }
辅助函数:
/* *辅助函数 */ functionpassport_key($str,$encrypt_key){ $encrypt_key=md5($encrypt_key); $ctr=0; $tmp=''; for($i=0;$i<strlen($str);$i++){ $ctr=$ctr==strlen($encrypt_key)?0:$ctr; $tmp.=$str[$i]^$encrypt_key[$ctr++]; } return$tmp; }
使用如下所示
$str='作者:www.nhooo.com'; $key='123456'; $encrypt=passport_encrypt($str,$key); $decrypt=passport_decrypt($encrypt,$key); echo'原文:',$str."<br><hr>"; echo'密文:',$encrypt."<br><hr>"; echo'译文:',$decrypt."<br><hr>";
DES加密解密函数具体代码如下:
<?php classDES { var$key; var$iv;//偏移量 functionDES($key,$iv=0){ //key长度8例如:1234abcd $this->key=$key; if($iv==0){ $this->iv=$key; }else{ $this->iv=$iv;//mcrypt_create_iv(mcrypt_get_block_size(MCRYPT_DES,MCRYPT_MODE_CBC),MCRYPT_DEV_RANDOM); } } functionencrypt($str){ //加密,返回大写十六进制字符串 $size=mcrypt_get_block_size(MCRYPT_DES,MCRYPT_MODE_CBC); $str=$this->pkcs5Pad($str,$size); returnstrtoupper(bin2hex(mcrypt_cbc(MCRYPT_DES,$this->key,$str,MCRYPT_ENCRYPT,$this->iv))); } functiondecrypt($str){ //解密 $strBin=$this->hex2bin(strtolower($str)); $str=mcrypt_cbc(MCRYPT_DES,$this->key,$strBin,MCRYPT_DECRYPT,$this->iv); $str=$this->pkcs5Unpad($str); return$str; } functionhex2bin($hexData){ $binData=""; for($i=0;$i<strlen($hexData);$i+=2){ $binData.=chr(hexdec(substr($hexData,$i,2))); } return$binData; } functionpkcs5Pad($text,$blocksize){ $pad=$blocksize-(strlen($text)%$blocksize); return$text.str_repeat(chr($pad),$pad); } functionpkcs5Unpad($text){ $pad=ord($text{strlen($text)-1}); if($pad>strlen($text)) returnfalse; if(strspn($text,chr($pad),strlen($text)-$pad)!=$pad) returnfalse; returnsubstr($text,0,-1*$pad); } } ?>
以下是测试结果:
$str='12345678'; $key='1234abcd'; $crypt=newDES($key); $mstr=$crypt->encrypt($str); $str=$crypt->decrypt($mstr); echo $str.'<=>'.$mstr;
例子2
代码如下:
/** *加密需通过get方式在url中传递的参数 */ functionargs_encode($data){ if(is_array($data)){ $string=http_build_query($data); returnbase64_encode($string); }else{ returnfalse; } }
/** *获取url中get方式传递的参数 */ functiongetargs(){ $string=base64_decode($_GET['args']); parse_str($string,$g); return$g; }