前件
PythonとPythonの暗号文の暗号化されたバージョンは、Javaコード、およびその逆で復号することができるように、1つの使用と同じJava AES暗号化アルゴリズムを必要とします。
Python実装
Pythonの3.6バージョン
# - * -コーディング:UTF-8 - * - 輸入base64で Crypto.Cipher輸入AESから の構文解析urllibはインポートから AES_SECRET_KEY = 'lingyejunAesTest' #此处16 | 24 | 32个字符 IV = "1234567890123456" #パディング算法 BS = LEN (AES_SECRET_KEY) パッド=ラムダS:S +(BS - LEN(S)%のBS)* CHR(BS - LEN(S)%のBS) unpad =ラムダS:S [0:-ord(S [-1:] )] クラスAES_ENCRYPT(オブジェクト): デフ__init __(自己): self.key = AES_SECRET_KEY self.mode = AES.MODE_CBC #加密函数 デフ暗号化(自己、テキスト): cryptor = AES.new(self.key.encode(」 UTF8 ")、self.mode、IV.encode(" UTF8 ")) self.ciphertext = cryptor.encrypt(バイト(パッド(テキスト)、エンコーディング="UTF8" )) 」UTF8「)) base64エンコーディングを使用する場合#AES ASCII文字セット、端末に出力または保存されたが、問題となることができるとき、文字列の暗号化は必ずしも得られません リターンbase64.b64encode(self.ciphertext) #解密函数 デフ(自己、テキスト)解読: デコード= base64.b64decode(テキスト) cryptor = AES.new(self.key.encode( "UTF8")、self.mode、IV .encode( "UTF8")) plain_text = cryptor.decrypt(デコード) リターンunpad(plain_text) 場合__name__ == '__main__': AES_ENCRYPT = AES_ENCRYPT() my_email = "[email protected]" E = aes_encrypt.encrypt(my_email ) D = aes_encrypt.decrypt(E) プリント(my_email) プリント(E) プリント(D)
Java実装
sun.misc.BASE64Decoderインポート、 インポートsun.misc.BASE64Encoder; 輸入javax.crypto.Cipher; インポートjavax.crypto.spec.IvParameterSpec; インポートするjavax.crypto.spec.SecretKeySpec; publicクラスAesTest { / ** *で暗号化キー26は、文字と数字かもしれ 本明細書で使用されるAES-128-CBC暗号化モード、キー16が必要とされ、*。 * / プライベートのsKey静的な文字列= "lingyejunAesTest"; プライベートivParameter静的な文字列= "1234567890123456"; //暗号化 パブリック静的な文字列を暗号化(文字列SSRC)は例外{スロー 暗号暗号= Cipher.getInstance( "AES / CBC / PKCS5Paddingを"); バイト[] =生のsKey.getBytes() 。 SecretKeySpec skeySpec =新しい新しいSecretKeySpec(RAW、 " IvParameterSpec IV =新しいIvParameterSpec(ivParameter.getBytesを( )); // CBCモードIVベクトルを必要とし、暗号化アルゴリズムの強度増加 cipher.init(Cipher.ENCRYPT_MODE、skeySpec、IV)を、 バイト[] = ENCRYPTED暗号。 doFinal(sSrc.getBytes( "UTF-8")); 新しい新しいBase64Encoderを(戻り)(暗号化)をコード;.本明細書で使用される場合、//はBASE64トランスコーディングを行います。 } //復号 パブリック静的な文字列復号化(文字列SSRC){ 試み{ バイト[] = sKey.getBytes RAW( "ASCII"); SecretKeySpec skeySpec =新しい新しいSecretKeySpec(RAW、 "AES"); 暗号暗号= Cipher.getInstance( " AES / CBC / PKCS5Padding「変換); IvParameterSpec IV =新新IvParameterSpec(ivParameter.getBytes()); cipher.init(Cipher.DECRYPT_MODE、skeySpec、IV)。 バイト[] encrypted1 =新しいBASE64Decoder()decodeBuffer(SSRC); //先用BASE64解密 バイト[] =オリジナルcipher.doFinal(encrypted1)。 ストリングoriginalString =新しい文字列(オリジナル、 "UTF-8"); originalStringを返します。 }キャッチ(例外例){ 戻りヌル。 } } パブリック静的無効メイン(文字列[] args){ 文字列のメール= "[email protected]"。 試す{ 文字列秒=暗号化(電子メール) System.out.println(秒)。 System.out.println(復号化( "CcOtM9WXv0N + OWH / xxedZJnuNUaTU7y3aUBESQLUvVM =")); }キャッチ(例外e){ e.printStackTrace(); } } }
次に、Javaコードの暗号化キーのうち、Pythonで入れ解読するために
JavaとPythonでAES方式の変換を達成するために行います。