ホームページ > バックエンド開発 > PHPチュートリアル > 4 つの便利な PHP カスタム暗号化関数 (可逆/不可逆)

4 つの便利な PHP カスタム暗号化関数 (可逆/不可逆)

藏色散人
リリース: 2023-04-08 07:50:01
転載
4994 人が閲覧しました

プロジェクトでは、PHP を使用して特定の情報を暗号化する必要がある場合があります。つまり、暗号化アルゴリズムを通じて暗号化された文字列を生成する必要があります。これらの暗号化された文字列は、復号化アルゴリズムを通じて復号化でき、プログラムによる復号化された情報の処理が容易になります。 。

最も一般的なアプリケーションは、ユーザー ログインと一部の API データ交換シナリオです。最も一般的なアプリケーションは、ユーザー ログインと一部の API データ交換シナリオです。暗号化と復号化の原理は、一般に、特定の暗号化と復号化アルゴリズムを使用し、そのアルゴリズムにキーを追加し、最終的に暗号化と復号化の結果を取得することです。

早速、コードに進みましょう。

1. IDの最初の可逆暗号化機能は招待コードなどにも利用できます 復号されたデータは比較的シンプルです

例:lockcode(28)=》 000Xunlockcode(' 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;
}
ログイン後にコピー

2. 2 つ目は、インターネットで検索した暗号化関数です。非常に使いやすく、暗号化を元に戻すことができ、ソルト パラメータもサポートしています。

##例:

#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);  
}
ログイン後にコピー
3 番目の 3 番目のタイプは上記と似ており、ソルト値パラメータもサポートしています。

例: 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;  
}
ログイン後にコピー

4. これは私が今まで使った中で最高のもので、discuz

# で使用される暗号化および復号化アルゴリズムです。

##
//加密算法
    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);
ログイン後にコピー

PHP 関連の知識について詳しくは、

PHP チュートリアル

をご覧ください。

以上が4 つの便利な PHP カスタム暗号化関数 (可逆/不可逆)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート