濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 分享幾種好用的PHP自定義加密函數(shù)(可逆/不可逆)

分享幾種好用的PHP自定義加密函數(shù)(可逆/不可逆)

熱門標(biāo)簽:ai電話機(jī)器人加盟代理 地圖標(biāo)注視頻廣告入駐 招標(biāo)自動(dòng)語(yǔ)音外呼系統(tǒng) OMG地圖標(biāo)注app 電銷機(jī)器人便宜的有嗎 黔江400電話如何辦理 gps 地圖標(biāo)注軟件 400電話鄭州申請(qǐng) 中原區(qū)電話機(jī)器人價(jià)格

項(xiàng)目中有時(shí)我們需要使用PHP將特定的信息進(jìn)行加密,也就是通過(guò)加密算法生成一個(gè)加密字符串,這些加密后的字符串可以通過(guò)解密算法進(jìn)行解密,便于程序?qū)饷芎蟮男畔⑦M(jìn)行處理。最常見(jiàn)的應(yīng)用在用戶登錄以及一些API數(shù)據(jù)交換的場(chǎng)景。最常見(jiàn)的應(yīng)用在用戶登錄以及一些API數(shù)據(jù)交換的場(chǎng)景。加密解密原理一般都是通過(guò)一定的加密解密算法,將密鑰加入到算法中,最終得到加密解密結(jié)果。

u=3837593897,2803417633fm=26gp=0.jpg

廢話不多說(shuō),直接上代碼。

一、第一種針對(duì)于ID的可逆加密函數(shù),也可以用作于邀請(qǐng)碼之類的,解密后的數(shù)據(jù)比較簡(jiǎn)單

示例:lockcode(28)=》000X unlockcode('000X')=》28

//加密函數(shù)
function lockcode($code) {
 static $source_string = 'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ';
 $num = $code;
 $code = '';
 while ( $num > 0) {
  $mod = $num % 35;
  $num = ($num - $mod) / 35;
  $code = $source_string[$mod].$code;
 }
 if(empty($code[3]))
  $code = str_pad($code,4,'0',STR_PAD_LEFT);
 return $code;
}
//解密函數(shù)
function unlockcode($code) {
 static $source_string = 'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ';
 if (strrpos($code, '0') !== false)
  $code = substr($code, strrpos($code, '0')+1);
 $len = strlen($code);
 $code = strrev($code);
 $num = 0;
 for ($i=0; $i  $len; $i++) {
  $num += strpos($source_string, $code[$i]) * pow(35, $i);
 }
 return $num;
}

二、第二種是加密函數(shù)是我在網(wǎng)上搜索來(lái)的,很好用,可逆加密,支持鹽值參數(shù)

示例:encrypt('abcd','1234')=》nkiV93IfJ decrypt('nkiV93IfJ','1234')=》abcd

//加密函數(shù) 
function encrypt($data,$key='CHENI'){ 
 $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; 
 $nh = rand(0,64); 
 $ch = $chars[$nh]; 
 $mdKey = md5($key.$ch); 
 $mdKey = substr($mdKey,$nh%8, $nh%8+7); 
 $data= base64_encode($data); 
 $tmp = ''; 
 $i=0;$j=0;$k = 0; 
 for ($i=0; $istrlen($data); $i++) { 
  $k = $k == strlen($mdKey) ? 0 : $k; 
  $j = ($nh+strpos($chars,$data[$i])+ord($mdKey[$k++]))%64; 
  $tmp .= $chars[$j]; 
 } 
 return urlencode($ch.$tmp); 
}
//解密函數(shù) 
function decrypt($data,$key='CHENI'){
 $txt = urldecode($data); 
 $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; 
 $ch = $txt[0]; 
 $nh = strpos($chars,$ch); 
 $mdKey = md5($key.$ch); 
 $mdKey = substr($mdKey,$nh%8, $nh%8+7); 
 $txt = substr($txt,1); 
 $tmp = ''; 
 $i=0;$j=0; $k = 0; 
 for ($i=0; $istrlen($txt); $i++) { 
  $k = $k == strlen($mdKey) ? 0 : $k; 
  $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]); 
  while ($j0) $j+=64; 
  $tmp .= $chars[$j]; 
 } 
 return base64_decode($tmp); 
}

三、第三種跟上面的比較類似,也支持鹽值參數(shù)

示例:encrypt('abcd','1234')=》mZPHxw== decrypt('mZPHxw==','1234')=》abcd

function encrypt($data, $key) { 
 $char="";
 $str="";
 $key = md5($key); 
 $x  = 0; 
 $len = strlen($data); 
 $l  = strlen($key); 
 for ($i = 0; $i  $len; $i++) { 
  if ($x == $l) { $x = 0; } 
  $char .= $key{$x}; 
  $x++; 
 } 
 for ($i = 0; $i  $len; $i++){ 
  $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256); 
 } 
 return base64_encode($str); 
} 
function decrypt($data, $key) { 
 $key = md5($key); 
 $x = 0; 
 $data = base64_decode($data); 
 $len = strlen($data); 
 $l = strlen($key); 
 for ($i = 0; $i  $len; $i++) { 
  if ($x == $l){ $x = 0;} 
  $char .= substr($key, $x, 1); 
  $x++; 
 } 
 for ($i = 0; $i  $len; $i++){ 
  if (ord(substr($data, $i, 1))  ord(substr($char, $i, 1))){ 
   $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1))); 
  }else{ 
   $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1))); 
  } 
 } 
 return $str; 
}

四、這個(gè)是我用過(guò)最好用的一個(gè)了,discuz中使用的加密解密算法

//加密算法
 function authcode($string,$key='',$operation=false,$expiry=0){
  $ckey_length = 4;
  $key = md5($key ? $key : DEFAULT_KEYS);
  $keya = md5(substr($key, 0, 16));
  $keyb = md5(substr($key, 16, 16));
  $keyc = $ckey_length ? ($operation? substr($string, 0, $ckey_length):substr(md5(microtime()), -$ckey_length)) : '';
  $cryptkey = $keya.md5($keya.$keyc);
  $key_length = strlen($cryptkey);
  $string = $operation? base64_decode(substr($string, $ckey_length)) :
  sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
  $string_length = strlen($string);
  $result = '';
  $box = range(0, 255);
  $rndkey = array();
  for($i = 0; $i = 255; $i++) {
   $rndkey[$i] = ord($cryptkey[$i % $key_length]);
  }
  for($j = $i = 0; $i  256; $i++) {
   $j = ($j + $box[$i] + $rndkey[$i]) % 256;
   $tmp = $box[$i];
   $box[$i] = $box[$j];
   $box[$j] = $tmp;
  }
  for($a = $j = $i = 0; $i  $string_length; $i++) {
   $a = ($a + 1) % 256;
   $j = ($j + $box[$a]) % 256;
   $tmp = $box[$a];
   $box[$a] = $box[$j];
   $box[$j] = $tmp;
   $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
  }
  if($operation) {
   if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) 
    substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
    return substr($result, 26);
   } else {
    return '';
   }
  } else {
   return $keyc.str_replace('=', '', base64_encode($result));
  }
 }
 echo authcode('123456','key');
 echo 'br>';
 echo authcode('7d49kn9k07uSBZvha8as+/qm4UoLfpy88PFg12glPeDtlzc','key',true);

以上幾種都是比較好用且是我自己常用的分享給大家,大家如果想要了解其他的加密函數(shù)或者有什么建議可以在底部留言。

您可能感興趣的文章:
  • 基于PHP實(shí)現(xiàn)解密或加密Cloudflar郵箱保護(hù)
  • php中加密解密DES類的簡(jiǎn)單使用方法示例
  • php的RSA加密解密算法原理與用法分析
  • PHP實(shí)現(xiàn)的XXTEA加密解密算法示例
  • PHP實(shí)現(xiàn)基于3DES算法加密解密字符串示例
  • php實(shí)現(xiàn)的rc4加密解密類定義與用法示例
  • PHP實(shí)現(xiàn)的AES加密、解密封裝類與用法示例
  • PHP使用自定義key實(shí)現(xiàn)對(duì)數(shù)據(jù)加密解密的方法
  • php自定義加密與解密程序?qū)嵗?/li>

標(biāo)簽:濟(jì)源 池州 阿里 北京 哈密 日照 孝感 那曲

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《分享幾種好用的PHP自定義加密函數(shù)(可逆/不可逆)》,本文關(guān)鍵詞  分享,幾種,好,用的,PHP,自定義,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《分享幾種好用的PHP自定義加密函數(shù)(可逆/不可逆)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于分享幾種好用的PHP自定義加密函數(shù)(可逆/不可逆)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    临漳县| 东辽县| 新竹县| 奇台县| 左权县| 莱芜市| 斗六市| 鹤庆县| 英德市| 天镇县| 罗山县| 阜新市| 囊谦县| 竹北市| 浦江县| 沙坪坝区| 黔东| 开化县| 新密市| 鹤庆县| 诸城市| 北碚区| 佛山市| 吉首市| 凤阳县| 绥中县| 民县| 广德县| 五原县| 山东| 化隆| 江陵县| 扬中市| 武清区| 会同县| 古浪县| 错那县| 莆田市| 句容市| 武义县| 宁波市|