1. 程式人生 > >PHP常用加密解密函式

PHP常用加密解密函式

一、加密解密函式

<?php
define('UC_KEY', 'abc123456');//整合程式的通訊金鑰
function authcode($string,$operation='DECODE',$key='',$expiry=0)
{
 
    $ckey_length = 4;   


    $key = md5($key ? $key : UC_KEY);   


    $keya = md5(substr($key, 0, 16));   


    $keyb = md5(substr($key, 16, 16));   


    $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';   


    $cryptkey = $keya.md5($keya.$keyc);   


    $key_length = strlen($cryptkey);   


    $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();   


    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') {   


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


    }   


}   


$ret=  authcode('www.baidu.com','ENCODE', 'abc123456',1);


echo  $ret .'    ';
echo  authcode($ret,'DECODE','abc123456',1) ;


?>

二、常用encrypt加解密函式

<?php
/**
  * 加密/解密字串
  *
  * @param  string     $string    原始字串
  * @param  string     $operation 操作選項: DECODE:解密;其它為加密
  * @param  string     $key       金鑰
  *
  * @return string     $result    處理加/解密後的字串
  */

 private function authcode($string, $operation, $key = '') {

      $key = md5($key ? $key : $GLOBALS['auth_key']);
      $key_length = strlen($key); 

      $string = $operation == 'DECODE' ? base64decode($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 == 'DECODE') {
           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));
      } 
 }
?>

相關推薦

PHP常用加密解密函式

一、加密解密函式 <?php define('UC_KEY', 'abc123456');//整合程式的通訊金鑰 function authcode($string,$operation='DECODE',$key='',$expiry=0) { $cke

php des 加密解密函式 mcrypt

/**************************** 加解密 *************************************/ //des 加密函式 function do_encrypt($str, $key, $cipher = MCRYPT_DES

php實現的三個常用加密解密功能函數示例

htm 常用 zab rand unlock ret == UNC test 目錄 算法一: 算法二: 算法三(改進第一個加密之後的算法) 本文實例講述了php實現的三個常用加密解密功能函數。分享給大家供大家參考,具體如下: 算法一: //加密函數 function

介紹幾個PHP 自帶的加密解密函式

PHP 自帶的加密解密函式 目前經常使用的加密函式有:md5(), sha1(), crypt(), base64_encode(), urlencode() 。 其中 md5(), sha1(), c

Mysql 常用函式總結(加密解密函式

MD5(str) md5加密 SELECT MD5('hello') 5d41402abc4b2a76b9719d911017c592 sha(str) sha加密 SELECT SH

php 加密解密函式封裝

演算法一:  //加密函式 function lock_url($txt,$key='yang') { $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+"; $nh = rand(0,64);

php中base64_decode與base64_encode加密解密函式例項

本文例項講述了php中base64_decode與base64_encode加密解密函式。分享給大家供大家參考。具體分析如下: 這兩個函式在php中是用得對php程式碼進行加密與解密碼的base64_encode是加密,而base64_decode是解密了,下面我們看兩個簡

discuz 經典php加密解密函式

<?php // 引數解釋 // $string: 明文 或 密文 // $operation:DECODE表示解密,其它表示加密 // $key: 密匙 // $expiry:密文有效期 function authcode($string, $operation =

php加密解密

urldecode ech 項目 mode function encrypt 變化 double printf php加密和解密函數通常可以用來加密一些有用的字符串存放在數據庫裏或作為各個子系統間同步登陸的令牌,並且通過解密算法解密字符串,該函數使用了base64和MD5

php rsa加密解密實例 及簽名驗證-自己實踐

date wql bio eee resource haar ted can open <?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/4/1 *

php aes加密解密類(兼容php5、php7)

bytes pri rip dom ase lee vat idea cipher <?php /** * @desc:php aes加密解密類 * @author [Lee] <[<[email protected]>]> */ class

php常用自定義函式 2

主要方法包含 取檔案的字尾名 取隨機字串 使用加密和解密字串函式 獲取檔案的大小 對字串使用替換字元 獲取web伺服器的檔案路徑 獲取當前頁面的URL 檢測瀏覽器語言 建立一個目錄樹 下載本目錄下的某個檔案 頁面提示與跳轉 獲取各種編碼的固定長度 取得使用者的真實ip地址 陣列值轉換

python寫的AES128/ECB/pkcs7加密解密函式

因為需要,要實現一個python版的AES128加解密方法,加密模式ECB,填充模式pkcs7.(貌似pkcs5和pkcs7是一模一樣的,我沒有看具體原因(好像是aes沒有64位的,64位對應5?)) 下面直接貼原始碼啦(我找了好幾個東拼西湊出來的,反正能工作,也支援中文) # -*- codi

PHP AES加密解密

<?php namespace app\models; class AES{ public $key; //建構函式,用金鑰初始化 function Prpcrypt( $k ) { $this->key = $k; } /*AES加密*/ public static function e

C#開發中常用加密解密方法解析

一、MD5加密演算法 我想這是大家都常聽過的演算法,可能也用的比較多。那麼什麼是MD5演算法呢?MD5全稱是message-digest algorithm 5,簡單的說就是單向的加密,即是說無法根據密文推匯出明文。 MD5主要用途: 1、對一段資訊生成資訊摘要,該摘要對該資訊具有唯一性

php常用的系統函式大全

字串函式 strlen:獲取字串長度,位元組長度 substr_count 某字串出現的次數 substr:字串擷取,獲取字串(按照位元組進行擷取) mb_strlen mb_substr strchr:與substr相似,從指定位置擷取一直到最後 strrchr(獲取檔案字

golang常用加密解密演算法總結(AES、DES、RSA、Sha1MD5)

在專案開發過程中,當操作一些使用者的隱私資訊,諸如密碼、帳戶金鑰等資料時,往往需要加密後可以在網上傳輸。這時,需要一些高效地、簡單易用的加密演算法加密資料,然後把加密後的資料存入資料庫或進行其他操作;當需要讀取資料時,把加密後的資料取出來,再通過演算法解密。 關於加密解密 當前我們專案中常用

PHP---常用陣列處理函式

1.array_reverse()陣列順序倒序排列 array_reverse() 函式將原陣列中的元素順序翻轉,建立新的陣列並返回。 如果第二個引數指定為 true,則元素的鍵名保持不變,否則鍵名將丟失。 2.rtrim()從字串右側移除字元 例: 去除

mysql加密解密函式

mysql下的加密函式有如下幾個 PASSWORD():建立一個經過加密的密碼字串,適合於插入到MySQL的安全系 統。該加密過程不可逆,和unix密碼加密過程使用不同的演算法。主要用於MySQL的認證系統。   ENCRYPT(,):使用UNIX crypt()系統加密字

php常用處理影象函式大全

gd_info函式:獲取當前安裝的GD庫的資訊 getimagesize函式:獲取影象的大小 image_type_to_extension函式:獲取影象型別的檔案字尾 image_type_to_mime_type函式:判斷一個IMAGETYPE常量的MIME型別 ima