最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP封裝的字符串加密解密函數(shù)

 更新時間:2015年12月18日 08:58:25   投稿:hebedich  
這篇文章主要給大家匯總介紹了PHP封裝的字符串加密解密函數(shù)以及使用方法,非常的簡單實用,有需要的小伙伴可以參考下

程序中經(jīng)常使用的PHP加密解密字符串函數(shù)

代碼如下:

/*********************************************************************
 函數(shù)名稱:encrypt
 函數(shù)作用:加密解密字符串
 使用方法:
 加密  :encrypt('str','E','nowamagic');
 解密  :encrypt('被加密過的字符串','D','nowamagic');
 參數(shù)說明:
 $string :需要加密解密的字符串
 $operation:判斷是加密還是解密:E:加密 D:解密
 $key  :加密的鑰匙(密匙);
*********************************************************************/
 function encrypt($string,$operation,$key='')
 {
  $key=md5($key);
  $key_length=strlen($key);
  $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string;
  $string_length=strlen($string);
  $rndkey=$box=array();
  $result='';
  for($i=0;$i<=255;$i++)
  {
   $rndkey[$i]=ord($key[$i%$key_length]);
   $box[$i]=$i;
  }
  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=='D')
  {
   if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8))
   {
    return substr($result,8);
   }
   else
   {
    return'';
   }
  }
  else
  {
   return str_replace('=','',base64_encode($result));
  }
 }

使用方法:

$id = 132;
 
$token = encrypt($id, 'E', 'a');
 
echo '加密:'.encrypt($id, 'E', 'a');
echo '<br />';
 
echo '解密:'.encrypt($token, 'D', 'a');

非常給力的authcode加密函數(shù),Discuz!經(jīng)典代碼(帶詳解):

function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {  
  // 動態(tài)密匙長度,相同的明文會生成不同密文就是依靠動態(tài)密匙  
  $ckey_length = 4;  
    
  // 密匙  
  $key = md5($key ? $key : $GLOBALS['discuz_auth_key']);  
    
  // 密匙a會參與加解密  
  $keya = md5(substr($key, 0, 16));  
  // 密匙b會用來做數(shù)據(jù)完整性驗證  
  $keyb = md5(substr($key, 16, 16));  
  // 密匙c用于變化生成的密文  
  $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length):
substr(md5(microtime()), -$ckey_length)) : '';  
  // 參與運算的密匙  
  $cryptkey = $keya.md5($keya.$keyc);  
  $key_length = strlen($cryptkey);  
  // 明文,前10位用來保存時間戳,解密時驗證數(shù)據(jù)有效性,10到26位用來保存$keyb(密匙b), 
//解密時會通過這個密匙驗證數(shù)據(jù)完整性  
  // 如果是解碼的話,會從第$ckey_length位開始,因為密文前$ckey_length位保存 動態(tài)密匙,以保證解密正確  
  $string = $operation == 'DECODE' ? 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();  
  // 產(chǎn)生密匙簿  
  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 == 'DECODE') { 
    // 驗證數(shù)據(jù)有效性,請看未加密明文的格式  
    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 {  
    // 把動態(tài)密匙保存在密文里,這也是為什么同樣的明文,生產(chǎn)不同密文后能解密的原因  
    // 因為加密后的密文可能是一些特殊字符,復制過程可能會丟失,所以用base64編碼  
    return $keyc.str_replace('=', '', base64_encode($result));  
  }  
}

函數(shù)authcode($string, $operation, $key, $expiry)中的$string:字符串,明文或密文;$operation:DECODE表示解密,其它表示加密;$key:密匙;$expiry:密文有效期。

用法:

$str = 'abcdef'; 
$key = 'www.helloweba.com'; 
echo authcode($str,'ENCODE',$key,0); //加密 
$str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk'; 
echo authcode($str,'DECODE',$key,0); //解密

3、加解密函數(shù)encrypt():

function encrypt($string,$operation,$key=''){ 
  $key=md5($key); 
  $key_length=strlen($key); 
   $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string; 
  $string_length=strlen($string); 
  $rndkey=$box=array(); 
  $result=''; 
  for($i=0;$i<=255;$i++){ 
      $rndkey[$i]=ord($key[$i%$key_length]); 
    $box[$i]=$i; 
  } 
  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=='D'){ 
    if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){ 
      return substr($result,8); 
    }else{ 
      return''; 
    } 
  }else{ 
    return str_replace('=','',base64_encode($result)); 
  } 
}

函數(shù)encrypt($string,$operation,$key)中$string:需要加密解密的字符串;$operation:判斷是加密還是解密,E表示加密,D表示解密;$key:密匙。

用法:

$str = 'abc'; 
$key = 'www.helloweba.com'; 
$token = encrypt($str, 'E', $key); 
echo '加密:'.encrypt($str, 'E', $key); 
echo '解密:'.encrypt($str, 'D', $key);

相關文章

  • php使用strip_tags()去除html標簽仍有空白的解決方法

    php使用strip_tags()去除html標簽仍有空白的解決方法

    這篇文章主要介紹了php使用strip_tags()去除html標簽仍有空白的解決方法,涉及php正則替換的相關操作技巧,需要的朋友可以參考下
    2016-07-07
  • 根據(jù)中文裁減字符串函數(shù)的php代碼

    根據(jù)中文裁減字符串函數(shù)的php代碼

    裁減字符串函數(shù)有很多,但是根據(jù)中文裁減字符串的卻很少,在本文將為大家介紹下使用php是如何實現(xiàn)的,感興趣的朋友不要錯過
    2013-12-12
  • 解析yii數(shù)據(jù)庫的增刪查改

    解析yii數(shù)據(jù)庫的增刪查改

    本篇文章是對yii數(shù)據(jù)庫增刪查改進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • 淺析php如何實現(xiàn)爬取數(shù)據(jù)原理

    淺析php如何實現(xiàn)爬取數(shù)據(jù)原理

    在本篇文章中,小編給大家分享了關于php如何實現(xiàn)爬取數(shù)據(jù)的原理知識點,有興趣的朋友們參考下。
    2018-09-09
  • PHP中key和current,next的聯(lián)合運用實例分析

    PHP中key和current,next的聯(lián)合運用實例分析

    這篇文章主要介紹了PHP中key和current,next的聯(lián)合運用,結合實例形式分析了key和current,next操作數(shù)組元素的相關技巧,需要的朋友可以參考下
    2016-03-03
  • PHP數(shù)組對象與Json轉換操作實例分析

    PHP數(shù)組對象與Json轉換操作實例分析

    這篇文章主要介紹了PHP數(shù)組對象與Json轉換操作,結合實例形式分析了php數(shù)組對象與json相互轉換的實現(xiàn)方法及相關操作技巧,需要的朋友可以參考下
    2019-10-10
  • php-fpm中max_children的配置

    php-fpm中max_children的配置

    今天小編就為大家分享一篇關于php-fpm中max_children的配置,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • php簡單處理XML數(shù)據(jù)的方法示例

    php簡單處理XML數(shù)據(jù)的方法示例

    這篇文章主要介紹了php簡單處理XML數(shù)據(jù)的方法,結合具體實例形式分析了php對xml格式數(shù)據(jù)的簡單載入、讀取、輸出等操作技巧,需要的朋友可以參考下
    2017-05-05
  • php獲取錯誤信息的方法

    php獲取錯誤信息的方法

    這篇文章主要介紹了php獲取錯誤信息的方法,涉及php針對錯誤處理的常用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 50個PHP程序性能優(yōu)化的方法

    50個PHP程序性能優(yōu)化的方法

    程序的執(zhí)行效率很重要,低的執(zhí)行效率意味著你需要在服務器硬件上有更多的投入,但是,最終的結果會因為你的程序執(zhí)行效率低,連硬件也無法解決。下面幾十個提高程序執(zhí)行效率的小知識就有必要了解了解了。
    2014-06-06

最新評論

会泽县| 昆山市| 邻水| 唐河县| 汶川县| 双流县| 应城市| 曲阜市| 蓬安县| 新余市| 禄丰县| 遂川县| 平遥县| 陇西县| 称多县| 合山市| 桓仁| 扬州市| 江西省| 平原县| 渭源县| 浦城县| 昂仁县| 西城区| 铜川市| 林口县| 新昌县| 闽清县| 金沙县| 金阳县| 叶城县| 神木县| 岐山县| 错那县| 阜康市| 黄大仙区| 吉安县| 武宣县| 南城县| 抚远县| 沙河市|