PHPの簡単な暗号化と復号化

<?PHPの
 名前空間のApp \サービス; 

/ * 
* @link http://kodcloud.com/ 
* @authorのwarlee | Eメール:[email protected] 
* @copyright warlee 2014年(上海上)株式会社
* @ライセンスhttp://kodcloud.com/tools/licenses/license.txt 
* ------ 
*解読文字列クラス; 
*ワンタイムパッド、復号化およびタイミング効果の
動的*&暗号化キーを生成するために使用することができる
*デモ:
*暗号化:のMcryptエコー::エンコード( 'ABC'、 '123'); 
*解読:のMcryptエコー::デコード( '9f843I0crjv5y0dWE_-uwzL_mZRyRb1ynjGK4I_IACQ'、 '123'); 
* / 

クラスのMcrypt {
     プライベート 静的 $のdefault_key = ' !TAKA:d1989lmc1988ldEv、E " ; 

    / * *
     *キャラクターの暗号化、ワンタイムパッド、タイミングが効果的に解読することができます
     * 
     * @param説明string文字列$ 
     *の@param文字列$キーキー
     * @param int型$期限有効な暗号文を、ユニットS、0は永久的である
     * @return文字列の暗号化内容
     * / 
    パブリック 静的関数でエンコード($ 文字列、キー$ = ''、$ =有効期限0 ){ 
        $ ckeyLength = 4。; 
        $キー = MD5(キー$ $キー:? :: $セルフdefault_key); // 復号鍵 
        $ KEYA = MD5(SUBSTR($キー、016));          // データの整合性検証のため 
        の$ KEYB = MD5(SUBSTR($キー、1616));          // 変動については、生成した暗号文(初期ベクトルIV) 
        $ KEYC = SUBSTR(MD5(微小時間、及び())、 - $ ckeyLength); 
        $ cryptkey = .. KEYA MD5 $($ $ KEYA KEYC)。
        KEYLENGTH $ = strlen関数($のcryptkey); 
        $ 文字列 =はsprintf(' %010D ':、$の$の有効期限満了+時間()?0 .SUBSTR(MD5($)文字列 $ KEYB),. 016)$。文字列; 
        $ StringLengthに = STRLEN($ 文字列); 

        $ rndkey = 配列();
         のため($ I = 0 ; $ I <= 255 ; $ I ++ )は、{ 
            $のrndkeyは[$ I]は ORD($ cryptkey [$ I%の= ; $のKEYLENGTH])
        } 

        $ボックス =範囲(0255 );
         // プレーカオスブックキーは、ランダム性増加
        のために($ I $ J = = 0を、$ I < 256 ;私は$ ++ ){ 
            $ J =(J + $ $ボックス[$ I] + $ rndkey [$ I])%256 ; 
            $ TMP = $ボックス[$ I]; 
            $ボックス[$ I] = $ボックス[$ J]; 
            $ボックス[$ J] = $ TMP; 
        } 
        //その後、暗号化とキーのXOR帳から派生した復号鍵、文字に 
        $結果= '' ;
         のため($ = $ A $ I = J = 0 ; $ I <$ StringLengthに、$ I ++ ){ 
            $ A =($ A + 1)%256 ; 
            $ J =($ J + $ボックス[$ A])%256 ; 
            $ TMP = $ボックス[$ A]; 
            $ボックス[$ A] = $ボックス[$ J] ; 
            $ボックス[$ J] = $ TMP; 
            。$結果 = CHR(ORD($ 文字列 [$ I])^($ボックス[($ボックス[$ A] + $ボックス[$ J])%256 ]) ); 
        } 
        $結果。= $ KEYC str_replace(' = ''' 、BASE64_ENCODE($結果)); 
        $結果 = str_replace(配列(' + '' / '' = ')、アレイ(' - '' _ '' ' )、$結果);
         戻ります$ result; 
    } / * * 
     *復号化された文字、ワンタイムパッド、タイミングが効果的に解読することができます
     * 
     * @param String型の文字列$暗号文
     * @paramの文字列$キーの復号鍵
     、コンテンツ復号@return文字列の後に*

    
     * / 
    パブリック 静的関数デコード($の文字列、$キー= '' 
    { 
        $の文字列 = str_replace(配列(' - '' _ '' ')、配列(' + '' / '' = ')、$の文字列); 
        $ ckeyLength = 4 ; 
        $キー = MD5($キー$キー:自己:: $のdefault_key?)。// 解密密匙
        KEYA MD5 = $(SUBSTR($キー、016));          // データの整合性検証のため 
        の$ KEYB = MD5(SUBSTR($キー、1616));          // 生成された暗号文の変更については、(初期化ベクトルIV) 
        $ KEYC = SUBSTR($ 文字列0 、$ ckeyLength); 
        $ cryptkey = $ KEYA MD5($ KEYA $ KEYC); .. 
        $ KEYLENGTH = STRLEN($のcryptkey); 
        $ 文字列 = BASE64_DECODE(SUBSTR($ 文字列、$ ckeyLength)); 
        $ StringLengthに = STRLEN($ 文字列); 

        $のrndkey= 配列();
        以下のために($ i = 0 ; $ iは= < 255 ; $ iが++ ){ 
            $のrndkey [$ i]は ORD($ cryptkeyを[$ I%= $ KEYLENGTH])。
        } 

        $ボックス =範囲(0255 );
        // 打乱密匙簿、增加随机性
        ため(の$ J = $ i = 0 ; $ iが< 256 ; $ iは++ ){ 
            $ jを =($ jの+の$ボックス[$ i]が+ $ rndkey [$ i]は)%256 
            $ TMP = $ボックス[$ i]は、
            $ボックス[$ i]を = $ボックス[$ jを]; 
            $ボックス[$ jを]= $ TMP; 
        } 
        // 文字に、その後、キーXOR帳から派生し、暗号化と復号鍵 
        $結果= '' ;
         のため($ = $ A $ I = J = 0 ; $ I <$ StringLengthに; $ I ++ ){ 
            $ A =($ A + 1)%256 ; 
            $ J =($ J + $ボックス[$ A])%256 ; 
            $ TMP = $ボックス[$ A]; 
            $ボックス[$ A] = $ボックス[$ J]; 
            $ボックス[$ J] = $ TMP; 
            。$結果 = CHR(ORD($ 文字列 [$ I])^($ボックス[($ボックス[$ A] + $ボックス[$ J])%256]))。
        } 
        もし、((SUBSTR($結果、010)== 0 || SUBSTR($結果、010) -時間()> 0  && SUBSTR($結果、1016)== SUBSTR(MD5( SUBSTR($結果、26)$ KEYB)。016 
        ){ 
            戻り SUBSTR($結果、26 )。
        } {
             戻り '' ; 
        } 
    } 
}

 

おすすめ

転載: www.cnblogs.com/sunlong88/p/11230822.html