PHP加密和解密函数

引导语:PHP可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。以下是百分网小编为大家整理的PHP加密和解密函数方法,供大家参考。

代码如下:

functionpassport_encrypt($str,$key){//加密函数

srand((double)microtime()*1000000);

$encrypt_key=md5(rand(0,32000));

$ctr=0;

$tmp='';

for($i=0;$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

$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

$ctr=$ctr==strlen($encrypt_key)?0:$ctr;

$tmp.=$str[$i]^$encrypt_key[$ctr++];

}

return$tmp;

}

$str='作者:JB51;

$key='jb51';

$encrypt=passport_encrypt($str,$key);

$decrypt=passport_decrypt($encrypt,$key);

echo'原文:',$str."

";

echo'密文:',$encrypt."

";

echo'译文:',$decrypt."

";

?>

第2篇:PHP url 加密解密函数代码方法

复制代码代码如下:

$returnUrl=rawurlencode(base64_encode($returnUrl));//编码

$returnUrl=parse_str(base64_decode($returnUrl));//解码或者

$returnUrl=base64_decode($returnUrl);//解码

//或者

//不知道为何,上面第一种解码方式返回的是null,求解

$returnUrl=base64_encode($returnUrl);//编码

$returnUrl=base64_decode($returnUrl);//解码

这是一种方式,但是是最安全的,因为只要知道这个原理就可以解开,不过你的要求不高这样就可以了.

如果要很安全的那就要用专门的加密类了,嘻嘻.

第3篇:PHP如何使用AES加密算法进行数据加密和解密

在利用PHP制作项目的时候经常会使用AES加密算法进行数据加密和解密,那么AES加密算法是如何进行数据加密和解密的呢?下面小编为大家解答一下,希望能帮到您!

AES加密是一种高级加密标准,AES加密采用对称分组密码体制,AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥长度不足时,会补齐)。

项目中用到了AES加密和解密数据,主要用在网络请求过程中对上传的参数进行加密,对从后台服务器获取的数据进行解密。

我们可以使用AES加密算法将数据加密起来,然后发送给后端,后端再将接收的数据用约定的密钥将数据还原,即解密,Aes算法加密后的数据在传输过程中不易被*。

在PHP中,我们需要先确保php的环境中安装好了Mcrypt扩展。PHP的mcrypt库提供了对多种块算法的支持,支持CBC,OFB,CFB和ECB密码模式,mcrypt库提供了丰富的函数使用,有兴趣的同学可以查阅PHP手册。

我已经将aes加解密封装成类,方便调用,在DEMO中可以看到调用效果。

<?php

classAes

{

private$secrect_key;

publicfunction__construct($secrect_key)

{

$this->secrect_key=$secrect_key;

}

//加密

publicfunctionencrypt($str)

{

$cipher=mcrypt_module_open(MCRYPT_RIJNDAEL_128,'',MCRYPT_MODE_ECB,'');

$iv=$this->createIv($cipher);

if(mcrypt_generic_init($cipher,$this->pad2Length($this->secrect_key,16),$iv)!=-1){

//PHPpadswithNULLbytesif$contentisnotamultipleoftheblocksize..

$cipherText=mcrypt_generic($cipher,$this->pad2Length($str,16));

mcrypt_generic_deinit($cipher);

mcrypt_module_close($cipher);

returnbin2hex($cipherText);

}

}

publicfunctiondecrypt($str)

{

$padkey=$this->pad2Length($this->secrect_key,16);

$td=mcrypt_module_open(MCRYPT_RIJNDAEL_128,'',MCRYPT_MODE_ECB,'');

$iv=$this->createIv($td);

if(mcrypt_generic_init($td,$padkey,$iv)!=-1){

$p_t=mdecrypt_generic($td,$this->hexToStr($str));

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

return$this->trimEnd($p_t);

}

}

//IV自动生成

privatefunctioncreateIv($td)

{

$iv_size=mcrypt_enc_get_iv_size($td);

$iv=mcrypt_create_iv($iv_size,MCRYPT_RAND);

return$iv;

}

//将$text补足$padlen倍数的长度

privatefunctionpad2Length($text,$padlen)

{

$len=strlen($text)%$padlen;

$res=$text;

$p=$padlen-$len;

for($i=0;$i<$p;$i++){

$res.=chr($p);

}

return$res;

}

//将解密后多余的长度去掉(因为在加密的时候补充长度满足block_size的长度)

privatefunctiontrimEnd($text){

$len=strlen($text);

$c=$text[$len-1];

if(ord($c)<$len){

for($i=$len-ord($c);$i<$len;$i++){

if($text[$i]!=$c){

return$text;

}

}

returnsubstr($text,0,$len-ord($c));

}

return$text;

}

//16进制的转为2进制字符串

privatefunctionhexToStr($hex){

$bin="";

for($i=0;$i<strlen($hex)-1;$i+=2){

$bin.=chr(hexdec($hex[$i].$hex[$i+1]));

}

return$bin;

}

}

调用Aes类进行加密和解密方法如下:

<?php

$key='MYgGnQE2jDFADSFFDSEWsdD2';//密钥

$str='abc';//要加密的字符串

$aes=newAes($key);

//加密

echo$aes->encrypt($str);

//解密

echo$aes->decrypt($str);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 yyfangchan@163.com (举报时请带上具体的网址) 举报,一经查实,本站将立刻删除