Heim > Backend-Entwicklung > PHP-Tutorial > Vier nützliche benutzerdefinierte PHP-Verschlüsselungsfunktionen (reversibel/irreversibel)

Vier nützliche benutzerdefinierte PHP-Verschlüsselungsfunktionen (reversibel/irreversibel)

藏色散人
Freigeben: 2023-04-08 07:50:01
nach vorne
4994 Leute haben es durchsucht

Manchmal müssen wir im Projekt PHP verwenden, um bestimmte Informationen zu verschlüsseln, das heißt, um durch den Verschlüsselungsalgorithmus eine verschlüsselte Zeichenfolge zu generieren. .

Die häufigsten Anwendungen sind die Benutzeranmeldung und einige API-Datenaustauschszenarien. Die häufigsten Anwendungen sind die Benutzeranmeldung und einige API-Datenaustauschszenarien. 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.

Kommen wir ohne weitere Umschweife direkt zum Code.

1. Die erste reversible Verschlüsselungsfunktion für ID kann auch für Einladungscodes und dergleichen verwendet werden. Die entschlüsselten Daten sind relativ einfach

Beispiel: lockcode(28)=》 000X unlockcode(' 000X')=》28

//加密函数
function lockcode($code) {
    static $source_string = 'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ';
    $num = $code;
    $code = '';
    while ( $num > 0) {
        $mod = $num % 35;
        $num = ($num - $mod) / 35;
        $code = $source_string[$mod].$code;
    }
    if(empty($code[3]))
        $code = str_pad($code,4,'0',STR_PAD_LEFT);
    return $code;
}
//解密函数
function unlockcode($code) {
    static $source_string = 'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ';
    if (strrpos($code, '0') !== false)
        $code = substr($code, strrpos($code, '0')+1);
    $len = strlen($code);
    $code = strrev($code);
    $num = 0;
    for ($i=0; $i < $len; $i++) {
        $num += strpos($source_string, $code[$i]) * pow(35, $i);
    }
    return $num;
}
Nach dem Login kopieren

Zweitens ist die Verschlüsselungsfunktion, die ich im Internet gesucht habe, sehr einfach zu verwenden, umkehrbare Verschlüsselung und unterstützt Salt-Parameter

Beispiel:

encrypt('abcd','1234')=》nkiV93IfJ decrypt('nkiV93IfJ','1234')=》abcd

//加密函数  
function encrypt($data,$key=&#39;CHENI&#39;){  
    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";  
    $nh = rand(0,64);  
    $ch = $chars[$nh];  
    $mdKey = md5($key.$ch);  
    $mdKey = substr($mdKey,$nh%8, $nh%8+7);  
    $data= base64_encode($data);  
    $tmp = &#39;&#39;;  
    $i=0;$j=0;$k = 0;  
    for ($i=0; $i<strlen($data); $i++) {  
        $k = $k == strlen($mdKey) ? 0 : $k;  
        $j = ($nh+strpos($chars,$data[$i])+ord($mdKey[$k++]))%64;  
        $tmp .= $chars[$j];  
    }  
    return urlencode($ch.$tmp);  
}
//解密函数  
function decrypt($data,$key=&#39;CHENI&#39;){
    $txt = urldecode($data);  
    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";  
    $ch = $txt[0];  
    $nh = strpos($chars,$ch);  
    $mdKey = md5($key.$ch);  
    $mdKey = substr($mdKey,$nh%8, $nh%8+7);  
    $txt = substr($txt,1);  
    $tmp = &#39;&#39;;  
    $i=0;$j=0; $k = 0;  
    for ($i=0; $i<strlen($txt); $i++) {  
        $k = $k == strlen($mdKey) ? 0 : $k;  
        $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]);  
        while ($j<0) $j+=64;  
        $tmp .= $chars[$j];  
    }  
    return base64_decode($tmp);  
}
Nach dem Login kopieren

3. Der dritte Typ ähnelt dem oben genannten und unterstützt auch den Salt-Parameter

Beispiel: encrypt('abcd','1234')=》mZPHxw== decrypt( 'mZPHxw==','1234')=》abcd

function encrypt($data, $key)  {  
    $char="";
    $str="";
    $key    =   md5($key);  
    $x      =   0;  
    $len    =   strlen($data);  
    $l      =   strlen($key);  
    for ($i = 0; $i < $len; $i++) {  
        if ($x == $l) { $x = 0; }  
        $char .= $key{$x};  
        $x++;  
    }  
    for ($i = 0; $i < $len; $i++){  
        $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);  
    }  
    return base64_encode($str);  
}  
function decrypt($data, $key) {  
    $key = md5($key);  
    $x = 0;  
    $data = base64_decode($data);  
    $len = strlen($data);  
    $l = strlen($key);  
    for ($i = 0; $i < $len; $i++) {  
        if ($x == $l){ $x = 0;}  
        $char .= substr($key, $x, 1);  
        $x++;  
    }  
    for ($i = 0; $i < $len; $i++){  
        if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))){  
            $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));  
        }else{  
            $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));  
        }  
    }  
    return $str;  
}
Nach dem Login kopieren

4. Dies ist der beste, den ich je verwendet habe, der in discuz verwendete Verschlüsselungs- und Entschlüsselungsalgorithmus

//加密算法
    function authcode($string,$key=&#39;&#39;,$operation=false,$expiry=0){
        $ckey_length = 4;
        $key = md5($key ? $key : DEFAULT_KEYS);
        $keya = md5(substr($key, 0, 16));
        $keyb = md5(substr($key, 16, 16));
        $keyc = $ckey_length ? ($operation? substr($string, 0, $ckey_length):substr(md5(microtime()), -$ckey_length)) : &#39;&#39;;
        $cryptkey = $keya.md5($keya.$keyc);
        $key_length = strlen($cryptkey);
        $string = $operation? base64_decode(substr($string, $ckey_length)) :
        sprintf(&#39;%010d&#39;, $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
        $string_length = strlen($string);
        $result = &#39;&#39;;
        $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) {
            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));
        }
    }
    echo authcode(&#39;123456&#39;,&#39;key&#39;);
    echo &#39;<br>&#39;;
    echo authcode(&#39;7d49kn9k07uSBZvha8as+/qm4UoLfpy88PFg12glPeDtlzc&#39;,&#39;key&#39;,true);
Nach dem Login kopieren

Weitere PHP-bezogene Kenntnisse finden Sie im PHP-Tutorial!

Das obige ist der detaillierte Inhalt vonVier nützliche benutzerdefinierte PHP-Verschlüsselungsfunktionen (reversibel/irreversibel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:csdn.net
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage