一般的なPHPクラスのとDESの暗号化と復号化

輸入java.io.UnsupportedEncodingException。
輸入java.security.InvalidAlgorithmParameterException。
輸入java.security.InvalidKeyException。
輸入java.security.Key。
輸入java.security.NoSuchAlgorithmException。
輸入java.util.Base64。
輸入java.util.Base64.Decoder。
輸入java.util.Base64.Encoder。
輸入java.util.Collections。
輸入javax.crypto.BadPaddingException。
輸入javax.crypto.Cipher;
輸入javax.crypto.IllegalBlockSizeException。
輸入javax.crypto.NoSuchPaddingException。
インポートjavax.crypto.spec.IvParameterSpec;
インポートするjavax.crypto.spec.SecretKeySpec;
パブリック クラスDesUtil 
{     
    公共 静的 ボイドメイン(文字列[]引数)
    { 
        DesUtil DES = 新しいDesUtil()。
        文字列RES = des.encrypt( "adminユーザー"、 "1234567"、 "asdfzxcv" )。
        System.out.println( "密文:" ); 
        System.out.println(RES)。
        ストリング平文 = des.decrypt(RES、 "1234567"、 "asdfzxcv" )。
        System.out.println( "明文:" );
        System.out。

     
     * @param 暗号化される平文データ
     * @param キー、キー、8バイトの文字列
     * @paramのIVランダム初期化ベクトルのパラメータ、長さのモードデス列8つのバイトが.javaファイルで指定されていませんパラメータは、警告をスローしますが、それでも、暗号化することができる使用されていません。このパラメータは、PHPでランダムなパラメータを暗号化します。
     * @return 
     * / 
    パブリック文字列の暗号化(平文文字列、文字キー、文字列IV)
    { 
        文字列の結果 = nullを試し 
        { 
            // IVは、オブジェクト 
            IvParameterSpec ivSpecは= 新しい新しい IvParameterSpec(iv.getBytes( "UTF-8" ));
             //キーの長さよりも短い場合、手動キーオブジェクト補体0を作成し、Javaは自動的に長さが午後12時00分未満8つのバイトを埋めます。異なる、PHPは自動的に暗号化結果につながる可能性があり、\ 0、いっぱいになります
            バイト[] NK = 新しい バイト [8 ]。
            もし(key.getBytes( "UTF-8")長さ<8 
            { 
                int型サブ= 8 - key.getBytes( "UTF-8" ).LENGTH。
                NK =(キー+ String.join( ""、Collections.nCopies(サブ、0 + "")))GetBytesメソッド( "UTF-8" )。
            } 
            { 
                NK = key.getBytes( "UTF-8" )。
            } 
            キーのsKey = 新しい SecretKeySpec(NK、 "DES" )。
            // 加解密服务类 
            暗号暗号=暗号。);
             // 暗号化するために指定された
            (Cipher.ENCRYPT_MODE、のsKey、ivSpec); cipher.initを
             //は、暗号化実行
            バイト [] = Cipher.doFinal暗号文(plaintext.getBytes( "UTF-8" ));
             //は、base64エンコーディングを返します文字列を介して 
            エンコーダエンコーダ= ; Base64.getEncoder()
            の結果 = encoder.encodeToString(暗号文); 
        } キャッチ(持つNoSuchAlgorithmException E)
        { 
            e.printStackTrace(); 
        } キャッチ(NoSuchPaddingException E)
        { 
            e.printStackTrace( );
        } キャッチ(IllegalBlockSizeException電子)
        { 
            e.printStackTrace(); 
        } キャッチ(BadPaddingException電子)
        { 
            e.printStackTrace(); 
        } キャッチ(例外:InvalidKeyException電子)
        { 
            e.printStackTrace(); 
        } キャッチ(例外e)
        { 
            e.printStackTrace(); 
        } 
        戻り値の結果; 
    } 
    
    パブリック文字列の復号化(暗号文文字、文字列キー、文字列IV)
    { 
        文字列結果 = NULL ; 
        デコーダデコーダ = Base64.getDecoder()。
        バイト [] cipherByte = decoder.decode(暗号文)。
        試す 
        { 
            IvParameterSpec ivSpec = 新しい IvParameterSpec(iv.getBytes( "UTF-8" ));
            バイト [] NK = 新しい バイト [8 ]。
            もし(key.getBytes( "UTF-8")長さ<8 
            { 
                int型サブ= 8 - key.getBytes( "UTF-8" ).LENGTH。
                NK =(キー+ String.join( ""、Collections.nCopies(サブ、0 + "")))GetBytesメソッド( "UTF-8" )。他の
                NK = key.getBytes( "UTF-8" ); 
            } 
            キーのsKey = 新しい SecretKeySpec(NK、 "DES" )。
            暗号暗号 = Cipher.getInstance( "DES / CBC / PKCS5Padding"変換)。
            cipher.init(Cipher.DECRYPT_MODE、のsKey、ivSpec)。
            バイト []平文= cipher.doFinal(cipherByte)。
            結果 = 新しい文字列(平文)。
        } キャッチ(にUnsupportedEncodingException電子)
        { 
            e.printStackTrace(); 
        } キャッチ(NoSuchPaddingException電子)
        { 
            e.printStackTrace(); 
        } キャッチ(持つNoSuchAlgorithmException電子)
        { 
            e.printStackTrace(); 
        } キャッチ(InvalidAlgorithmParameterExceptionが電子)
        { 
            e.printStackTrace(); 
        } キャッチ(例外:InvalidKeyException電子)
        { 
            e.printStackTrace(); 
        } キャッチ(BadPaddingException電子)
        { 
            e.printStackTrace(); 
        } キャッチ(IllegalBlockSizeException電子)
        { 
            e.printStackTrace(); 
        }
        
        リターン結果; 
    }
}

対応するPHPの暗号化と復号化:

クラスDES 
{ 
    パブリック 関数で暗号化($平文$キー$のIV 
    { 
        // Javaの充填規則を使用して
        IFstrlenを$キー)<。8 
        { 
            $キー = $キーにおけるSTR_Repeat( '0'、。8 - strlenを$キー)); 
        } 
        // 第四のパラメータは、0に設定された自動充填に戻り、暗号文base64エンコードされていることを全てさ
        $暗号文 = openssl_encrypt($平文、 'DES-CBC'、$キー、0、IV $ )。
        返す $暗号文を
    } 

    パブリック 関数の解読($暗号文$キー$ IV 
    { 
        場合STRLEN$キー)<8 
        { 
            $キー = $キーSTR_Repeat( '0'、8 - STRLEN$キー)); 
        } 
        // 解密数据
        $平文 = openssl_decrypt($暗号文、 'DES-CBC'、$キー、0、$ IV )。
        リターン $平文; 
    } 
}

 

おすすめ

転載: www.cnblogs.com/fxyy/p/11279489.html
おすすめ