PHP加密和解密函數(shù)
引導(dǎo)語(yǔ):PHP可以執(zhí)行編譯后代碼,編譯可以達(dá)到加密和優(yōu)化代碼運(yùn)行,使代碼運(yùn)行更快。以下是百分網(wǎng)小編為大家整理的PHP加密和解密函數(shù)方法,供大家參考。
代碼如下:
functionpassport_encrypt($str,$key){//加密函數(shù)
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){//解密函數(shù)
$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 加密解密函數(shù)代碼方法
復(fù)制代碼代碼如下:
$returnUrl=rawurlencode(base64_encode($returnUrl));//編碼
$returnUrl=parse_str(base64_decode($returnUrl));//解碼或者
$returnUrl=base64_decode($returnUrl);//解碼
//或者
//不知道為何,上面第一種解碼方式返回的是null,求解
$returnUrl=base64_encode($returnUrl);//編碼
$returnUrl=base64_decode($returnUrl);//解碼
這是一種方式,但是是最安全的,因?yàn)橹灰肋@個(gè)原理就可以解開,不過(guò)你的要求不高這樣就可以了.
如果要很安全的那就要用專門的加密類了,嘻嘻.
第3篇:PHP如何使用AES加密算法進(jìn)行數(shù)據(jù)加密和解密
在利用PHP制作項(xiàng)目的時(shí)候經(jīng)常會(huì)使用AES加密算法進(jìn)行數(shù)據(jù)加密和解密,那么AES加密算法是如何進(jìn)行數(shù)據(jù)加密和解密的呢?下面小編為大家解答一下,希望能幫到您!
AES加密是一種高級(jí)加密標(biāo)準(zhǔn),AES加密采用對(duì)稱分組密碼體制,AES加密數(shù)據(jù)塊分組長(zhǎng)度必須為128比特,密鑰長(zhǎng)度可以是128比特、192比特、256比特中的任意一個(gè)(如果數(shù)據(jù)塊及密鑰長(zhǎng)度不足時(shí),會(huì)補(bǔ)齊)。
項(xiàng)目中用到了AES加密和解密數(shù)據(jù),主要用在網(wǎng)絡(luò)請(qǐng)求過(guò)程中對(duì)上傳的參數(shù)進(jìn)行加密,對(duì)從后臺(tái)服務(wù)器獲取的數(shù)據(jù)進(jìn)行解密。
我們可以使用AES加密算法將數(shù)據(jù)加密起來(lái),然后發(fā)送給后端,后端再將接收的數(shù)據(jù)用約定的密鑰將數(shù)據(jù)還原,即解密,Aes算法加密后的數(shù)據(jù)在傳輸過(guò)程中不易被*。
在PHP中,我們需要先確保php的環(huán)境中安裝好了Mcrypt擴(kuò)展。PHP的mcrypt庫(kù)提供了對(duì)多種塊算法的支持,支持CBC,OFB,CFB和ECB密碼模式,mcrypt庫(kù)提供了豐富的函數(shù)使用,有興趣的同學(xué)可以查閱PHP手冊(cè)。
我已經(jīng)將aes加解密封裝成類,方便調(diào)用,在DEMO中可以看到調(diào)用效果。
<?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自動(dòng)生成
privatefunctioncreateIv($td)
{
$iv_size=mcrypt_enc_get_iv_size($td);
$iv=mcrypt_create_iv($iv_size,MCRYPT_RAND);
return$iv;
}
//將$text補(bǔ)足$padlen倍數(shù)的長(zhǎng)度
privatefunctionpad2Length($text,$padlen)
{
$len=strlen($text)%$padlen;
$res=$text;
$p=$padlen-$len;
for($i=0;$i<$p;$i++){
$res.=chr($p);
}
return$res;
}
//將解密后多余的長(zhǎng)度去掉(因?yàn)樵诩用艿臅r(shí)候補(bǔ)充長(zhǎng)度滿足block_size的長(zhǎng)度)
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進(jìn)制的轉(zhuǎn)為2進(jìn)制字符串
privatefunctionhexToStr($hex){
$bin="";
for($i=0;$i<strlen($hex)-1;$i+=2){
$bin.=chr(hexdec($hex[$i].$hex[$i+1]));
}
return$bin;
}
}
調(diào)用Aes類進(jìn)行加密和解密方法如下:
<?php
$key='MYgGnQE2jDFADSFFDSEWsdD2';//密鑰
$str='abc';//要加密的字符串
$aes=newAes($key);
//加密
echo$aes->encrypt($str);
//解密
echo$aes->decrypt($str);
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 yyfangchan@163.com (舉報(bào)時(shí)請(qǐng)帶上具體的網(wǎng)址) 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除