欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php加密之discuz內容經(jīng)典加密方式實例詳解

 更新時間:2017年02月04日 11:42:35   作者:風起從容  
這篇文章主要介紹了php加密之discuz內容經(jīng)典加密方式,結合具體實例形式詳細分析了discuz加密的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了php加密之discuz內容經(jīng)典加密方式。分享給大家供大家參考,具體如下:

導讀:有的時候,我們希望對表里的某些敏感字段進行加密,想了好長時間沒有比較好的解決方案,后臺在網(wǎng)上查了查,放心discuz論壇的這種方案對這種情況解決的不錯,特copy過來,給大家分享一下,代碼如下:

header ( "Content-type:text/html;charset=UTF-8" );
echo $string='花園路888號';
echo '<hr/>加密有效期10秒,密文內容:';
// $string='1111';
$sss=authcode($string,'','',10);
echo $sss;
echo '<hr/>加密后立即解密:...';
echo authcode($sss);
sleep(6);
echo '<hr/>6秒后解密...';
$aaaa=authcode($sss);
var_dump($aaaa);
sleep(5);
echo '<hr/>再次5秒后解密...';
$aaaa=authcode($sss);
var_dump($aaaa);
/**
 *
 * @param string $string    明文或密文字符串
 * @param string $operation    DECODE表示解密,其它表示加密
 * @param string $key    密鑰
 * @param int $expiry    密文有效期,0代碼永不過期
 * @return string
 */
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 ( '0d', $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') {
        // substr($result, 0, 10) == 0 驗證數(shù)據(jù)有效性
        // substr($result, 0, 10) - time() > 0 驗證數(shù)據(jù)有效性
        // substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0,
        // 16) 驗證數(shù)據(jù)完整性
        // 驗證數(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 ) );
    }
}

以上代碼運行結果:

花園路888號
加密有效期10秒,密文內容:ce9eelLd6jpd7hZJTRg+/fgg8cD9VG+1NsHvkavEKhdvhk7jcfDoQTYSAAw
加密后立即解密:...花園路888號
6秒后解密...
string'花園路888號' (length=15)
再次5秒后解密...
string'' (length=0)

PS:關于加密解密感興趣的朋友還可以參考本站在線工具:

MD5在線加密工具:
http://tools.jb51.net/password/CreateMD5Password

迅雷、快車、旋風URL加密/解密工具:
http://tools.jb51.net/password/urlrethunder

在線散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha

在線sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php加密方法總結》、《PHP編碼與轉碼操作技巧匯總》、《PHP數(shù)學運算技巧總結》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結》、《PHP數(shù)據(jù)結構與算法教程》、《php程序設計算法總結》及《php正則表達式用法總結

希望本文所述對大家PHP程序設計有所幫助。

相關文章

  • php聚合式迭代器的基礎知識點及實例代碼

    php聚合式迭代器的基礎知識點及實例代碼

    在本篇文章里小編給大家整理的是一篇關于php聚合式迭代器的基礎知識點及實例代碼,有興趣的朋友們可以學習參考下。
    2021-07-07
  • PHP中Session和Cookie是如何操作的

    PHP中Session和Cookie是如何操作的

    我們跟蹤用戶信息時需要用到Session和Cookie,比如用戶登錄驗證、記錄用戶瀏覽歷史,存儲購物車數(shù)據(jù),限制用戶會話有效時間等。今天我們來了解下PHP是如何操作Session和Cookie的。
    2015-10-10
  • PHP進階學習之Geo的地圖定位算法詳解

    PHP進階學習之Geo的地圖定位算法詳解

    這篇文章主要介紹了PHP進階學習之Geo的地圖定位算法,結合實例形式詳細分析了php Geo的地圖定位算法相關概念、原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2019-06-06
  • 為你總結一些php信息函數(shù)

    為你總結一些php信息函數(shù)

    PHP語言是一個基于函數(shù)的HTML語言,它龐大的函數(shù)庫可以幫助我們實現(xiàn)許多功能需求。我們在這里為大家詳細介紹了PHP信息函數(shù)包含的一些函數(shù)概念,需要的朋友可以參考下
    2015-10-10
  • php獲取網(wǎng)頁里所有圖片并存入數(shù)組的方法

    php獲取網(wǎng)頁里所有圖片并存入數(shù)組的方法

    這篇文章主要介紹了php獲取網(wǎng)頁里所有圖片并存入數(shù)組的方法,涉及php正則匹配及數(shù)組操作的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • php使用sql server驗證連接數(shù)據(jù)庫的方法

    php使用sql server驗證連接數(shù)據(jù)庫的方法

    這篇文章主要介紹了php使用sql server驗證連接數(shù)據(jù)庫的方法,以實例形式分析了php采用基于SQL Server驗證進行數(shù)據(jù)庫連接的原理及技巧,并總結了相關注意事項,需要的朋友可以參考下
    2014-12-12
  • 一些使用頻率比較高的php函數(shù)

    一些使用頻率比較高的php函數(shù)

    在php開發(fā)中,我們經(jīng)常會遇到一些函數(shù),下面是整理好的,可以直接使用,方便開發(fā)效率,不過建議大家一定要先看懂,然后在這個基礎上增加功能就提高了自身能力了
    2008-10-10
  • php ss7.5的數(shù)據(jù)調用 (筆記)

    php ss7.5的數(shù)據(jù)調用 (筆記)

    這里不再多說 這里只說 ss7.5的數(shù)據(jù)調用 不管是外部的 還是內部的
    2010-03-03
  • php使用include 和require引入文件的區(qū)別

    php使用include 和require引入文件的區(qū)別

    require()語句的性能與include()相類似,都是包括并運行指定文件。不同之處在于:對include()語句來說,在執(zhí)行文件時每次都要進行讀取和評估;而對于require()來說,文件只處理一次(實際上,文件內容替換require()語句)。
    2017-02-02
  • php插入排序法實現(xiàn)數(shù)組排序實例

    php插入排序法實現(xiàn)數(shù)組排序實例

    這篇文章主要介紹了php插入排序法實現(xiàn)數(shù)組排序,實例分析了插入排序法的原理與具體的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02

最新評論