Heim  >  Artikel  >  Backend-Entwicklung  >  2 weitere klassische PHP-Verschlüsselungs- und Entschlüsselungsfunktionen

2 weitere klassische PHP-Verschlüsselungs- und Entschlüsselungsfunktionen

不言
不言Original
2018-04-03 10:12:251850Durchsuche


Nachdruck: https://www.cnblogs.com/wicub/p/6395349.html



In diesem Artikel wird hauptsächlich die gemeinsame Nutzung von zwei weiteren klassischen PHP-Verschlüsselungs- und Entschlüsselungsfunktionen vorgestellt, eine ist die Authcode-Verschlüsselungsfunktion von Discuz! (mit detaillierter Zerlegung) und die andere ist die Funktion encrypt(), die beide vorhanden sind relativ klassisch, Freunde in Not Sie können sich auf Folgendes beziehen

Manchmal müssen wir im Projekt PHP verwenden, um bestimmte Informationen zu verschlüsseln, das heißt, durch den Verschlüsselungsalgorithmus wird eine verschlüsselte Zeichenfolge generiert . Diese verschlüsselte Zeichenfolge kann mit dem Entschlüsselungsalgorithmus Decrypt entschlüsselt werden, um dem Programm die Verarbeitung der entschlüsselten Informationen zu erleichtern.
Die häufigsten Anwendungen sind die Benutzeranmeldung und einige API-Datenaustauschszenarien.

Der Autor hat einige klassische PHP-Verschlüsselungs- und Entschlüsselungsfunktionscodes zusammengestellt, um sie mit Ihnen zu teilen. Das Prinzip der Verschlüsselung und Entschlüsselung besteht im Allgemeinen darin, einen bestimmten Verschlüsselungs- und Entschlüsselungsalgorithmus zu verwenden, den Schlüssel zum Algorithmus hinzuzufügen und schließlich die Verschlüsselungs- und Entschlüsselungsergebnisse zu erhalten.
1. Sehr leistungsstarke Authentifizierungscode-Verschlüsselungsfunktion, Discuz! Klassischer Code (mit detaillierter Erklärung):


2 weitere klassische PHP-Verschlüsselungs- und Entschlüsselungsfunktionen

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('%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  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));   
    }   
}

2 weitere klassische PHP-Verschlüsselungs- und Entschlüsselungsfunktionen

$string in function authcode($string, $operation, $key, $expiry) : String, Klartext oder Chiffretext; $operation: DECODE bedeutet Entschlüsselung, other bedeutet Verschlüsselung; $key: Verschlüsselungsschlüssel; $expiry: Gültigkeitsdauer des Chiffretextes.

Verwendung:

$str = 'abcdef'; 
$key = 'www.helloweba.com'; 
echo authcode($str,'ENCODE',$key,0); //加密 $str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk'; 
echo authcode($str,'DECODE',$key,0); //解密

2. Verschlüsselungs- und Entschlüsselungsfunktion encrypt():


2 weitere klassische PHP-Verschlüsselungs- und Entschlüsselungsfunktionen

function encrypt($string,$operation,$key=''){ 
    $key=md5($key); 
    $key_length=strlen($key); 
      $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string; 
    $string_length=strlen($string); 
    $rndkey=$box=array(); 
    $result=''; 
    for($i=0;$i<p class="cnblogs_code_toolbar" style="margin:5px 0px 0px;padding:0px;"><span class="cnblogs_code_copy" style="margin:0px;padding:0px 5px 0px 0px;line-height:1.5;"><img src="https://img.php.cn/upload/article/000/153/291/9e43d35958ca6748e93ca3656ec369b0-0.gif" alt="2 weitere klassische PHP-Verschlüsselungs- und Entschlüsselungsfunktionen"></span></p><p   style="max-width:90%"Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;text-align:left;background-color:rgb(245,245,245);">Funktion encrypt($string,$ Operation, $key) in $string: die Zeichenfolge, die verschlüsselt oder entschlüsselt werden soll; E bedeutet Verschlüsselung, D bedeutet Entschlüsselung; $key: Schlüssel. <br>Verwendung: </p><p class="cnblogs_code" style="margin:5px 0px;padding:5px;background-color:rgb(245,245,245);border:1px solid rgb(204,204,204);color:rgb(0,0,0);text-align:left;font-family:'Courier New';font-size:12px;"></p><pre style="margin-bottom:0px;padding-right:0px;padding-left:0px;white-space:pre-wrap;font-family:'Courier New';">$str = 'abc'; 
$key = 'www.helloweba.com'; 
$token = encrypt($str, 'E', $key); 
echo '加密:'.encrypt($str, 'E', $key); 
echo '解密:'.encrypt($str, 'D', $key);

相关推荐:

分享一个刚写的PHP加密解密函数 

PHP中加密解密函数与DES加密解密实例


Das obige ist der detaillierte Inhalt von2 weitere klassische PHP-Verschlüsselungs- und Entschlüsselungsfunktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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