一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php加密之discuz內容經典加密方式實例詳解

php加密之discuz內容經典加密方式實例詳解

2021-04-19 16:20風起從容 PHP教程

這篇文章主要介紹了php加密之discuz內容經典加密方式,結合具體實例形式詳細分析了discuz加密的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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) {
    // 動態密匙長度,相同的明文會生成不同密文就是依靠動態密匙
    $ckey_length = 4;
    // 密匙
    $key = md5 ( $key ? $key : $GLOBALS ['discuz_auth_key'] );
    // 密匙a會參與加解密
    $keya = md5 ( substr ( $key, 0, 16 ) );
    // 密匙b會用來做數據完整性驗證
    $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位用來保存時間戳,解密時驗證數據有效性,10到26位用來保存$keyb(密匙b),解密時會通過這個密匙驗證數據完整性
    // 如果是解碼的話,會從第$ckey_length位開始,因為密文前$ckey_length位保存 動態密匙,以保證解密正確
    $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 ();
    // 產生密匙簿
    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 驗證數據有效性
        // substr($result, 0, 10) - time() > 0 驗證數據有效性
        // substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0,
        // 16) 驗證數據完整性
        // 驗證數據有效性,請看未加密明文的格式
        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 {
        // 把動態密匙保存在密文里,這也是為什么同樣的明文,生產不同密文后能解密的原因
        // 因為加密后的密文可能是一些特殊字符,復制過程可能會丟失,所以用base64編碼
        return $keyc . str_replace ( '=', '', base64_encode ( $result ) );
    }
}

以上代碼運行結果:

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 8x8x拔插| 九九精品视频在线观看 | 国产三级自拍 | 免费av在线视频 | 亚洲另类激情 | 午夜宅男宅女看在线观看 | 国产欧美一区二区精品性色 | 99热人人 | 暖暖日本高清 | 国内自拍网红在线综合 | 日本免费一区二区三区a区 日本免费三片在线观看 | 日本一区二区不卡久久入口 | 边摸边吃奶边做爽gif动态图 | jizzjizz成熟丰满舒服 | 91噜噜噜在线观看 | 黄a 大片a v 永久免费 | 天堂日韩 | 亚洲国产视频一区 | 亚洲AVAV天堂AV在线网爱情 | 日韩在线 在线播放 | 日本中文字幕永久在线 | 免费超级乱淫播放手机版 | 香蕉国产成版人视频在线观看 | 日韩成人免费aa在线看 | 国产愉拍精品视频手机 | chinese男男gay| 四虎综合九九色九九综合色 | xxxx成人| 黑帮少爷爱上我第8集最新 荷兰精品女人性hd 和日本免费不卡在线v | 日本高清中文字幕 | 成年人在线播放视频 | 日韩精品免费一级视频 | 狠狠搞视频 | 欧美亚洲另类在线观看 | 把女的下面扒开添视频 | 操美女bb | 猛h辣h高h文湿重口 门房秦大爷在线阅读 | 含羞草传媒一天免费看下 | 2020年新四虎免费 | 高h辣文小说网 烧书阁 | 26uuu老色哥|