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; }