激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

服務(wù)器之家 - 編程語言 - PHP教程 - php加密之discuz內(nèi)容經(jīng)典加密方式實例詳解

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

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

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

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

導(dǎo)讀:有的時候,我們希望對表里的某些敏感字段進行加密,想了好長時間沒有比較好的解決方案,后臺在網(wǎng)上查了查,放心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秒,密文內(nèi)容:';
// $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] );
    }
    // 用固定的算法,打亂密匙簿,增加隨機性,好像很復(fù)雜,實際上對并不會增加密文的強度
    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;
        // 從密匙簿得出密匙進行異或,再轉(zhuǎn)成字符
        $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)不同密文后能解密的原因
        // 因為加密后的密文可能是一些特殊字符,復(fù)制過程可能會丟失,所以用base64編碼
        return $keyc . str_replace ( '=', '', base64_encode ( $result ) );
    }
}

以上代碼運行結(jié)果:

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品欧美一区二区精品久久 | 免费毛片观看 | 国产精品高清一区 | 欧美日本综合 | 成人爱爱电影 | 日韩午夜一区二区三区 | 欧美色视 | 国产在线精品91 | 午夜视频国产 | 亚洲网站免费观看 | 日韩字幕在线 | 色播视频网站 | 午夜爽爽爽男女免费观看hd | 欧美性a视频 | 日韩欧美精品中文字幕 | 本色视频aaaaaa一级网站 | 久久福利剧场 | 婷婷久久综合九色综合色多多蜜臀 | 久国久产久精永久网页 | 天天干干 | 国产一国产一级毛片视频 | 依依成人综合 | av在线收看 | 4p嗯啊巨肉寝室调教男男视频 | va免费视频 | 色诱亚洲精品久久久久久 | 色妇视频 | 国产一级大片在线观看 | 中国大陆一级毛片 | 毛片a区 | 草免费视频 | 特逼视频| 成熟女人特级毛片www免费 | chinese军人gay呻吟 | 在线91视频| 国产成人综合在线观看 | www.guochanav.com| 在线无码 | 天天草天天色 | 被摁着灌浓精囚禁高h1v1 | 免费专区 - 91爱爱 |