Heim > Backend-Entwicklung > PHP-Tutorial > Detaillierte Erklärung, wie PHP zeitkritischen Chiffretext generiert

Detaillierte Erklärung, wie PHP zeitkritischen Chiffretext generiert

*文
Freigeben: 2023-03-19 06:30:01
Original
2463 Leute haben es durchsucht

Wie generiert PHP zeitkritischen Chiffretext? Kürzlich habe ich in discuz eine sehr gute Ver- und Entschlüsselungsfunktion gefunden. Das Tolle an dieser Funktion ist, dass sie die Zeichenfolge innerhalb der angegebenen Zeit verschlüsseln und wiederherstellen kann und nach einer Zeitüberschreitung nicht wiederhergestellt werden kann. Ich teile es als Referenz für alle und hoffe, dass es für alle hilfreich sein wird.

Auf diese Weise können wir diese Funktion für viele Zwecke nutzen, z. B. für die verschlüsselte Übertragung von Single-Sign-On-Tokens, temporären Passwörtern usw.

/** 
* @param string $string 原文或者密文 
* @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE 
* @param string $key 密钥 
* @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效 
* @return string 处理后的 原文或者 经过 base64_encode 处理后的密文 
* 
* @example 
* 
* $a = authcode('abc', 'ENCODE', 'key'); 
* $b = authcode($a, 'DECODE', 'key'); // $b(abc) 
* 
* $a = authcode('abc', 'ENCODE', 'key', 3600); 
* $b = authcode('abc', 'DECODE', 'key'); // 在一个小时内,$b(abc),否则 $b 为空 
*/ 
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 3600) { 
    $ckey_length = 4; 
    // 随机密钥长度 取值 0-32; 
    // 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。 
    // 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方 
    // 当此值为 0 时,则不产生随机密钥 
    $key = md5($key ? $key : EABAX::getAppInf('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 == &#39;DECODE&#39;) { 
        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 &#39;&#39;; 
        } 
    } else { 
        return $keyc.str_replace(&#39;=&#39;, &#39;&#39;, base64_encode($result)); 
    } 
}
Nach dem Login kopieren

Verwandte Themen Empfehlungen:

PHP generiert lesbare Zufallszeichenfolgen

Wie PHP Webseiten implementiert Schließen Sie das Non-Stop Skript

Wie PHP Passwörter besser verschlüsseln kann

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung, wie PHP zeitkritischen Chiffretext generiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Aktuelle Ausgaben
PHP-Datenerfassung?
Aus 1970-01-01 08:00:00
0
0
0
PHP-Erweiterung intl
Aus 1970-01-01 08:00:00
0
0
0
Wie man PHP gut lernt
Aus 1970-01-01 08:00:00
0
0
0
Mehrere PHP-Versionen
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage