Pythonはjarを呼び出して方法を包んで過程の解析を実現します。


需要
最近はバックグランドプロジェクトコードの中でカスタムAESを復号するプログラムが通常のテスト作業で頻繁に使われています。台本を書くときはよく使うので、jpypeなどいろいろ試してみましたが、なかなかうまくいきません。最後に考えを変えていい方法を見つけました。
1.javaプロジェクトをjarパッケージにする。
2.jarカバンのMain-class属性を設定します。
3.pythonでsubprocessを通じてjarパケットを実行します。
main関数を修正してjarカバンを作ります。
intellijでjarカバンを打つ:
1.File-->Project Structure...--Artfacts-->>>>>>>JAR-->From modules with dependencies->OK-->Include in project buildにチェックを付ける。上のOutput directory経路を記録する。
2.Build-->Build Project-->の後にOutput directoryの経路で見られるjarのカバンです。
3.WinRARでjarパッケージを開けて、META-INFフォルダの下のMANIFEST.MFファイルを修正して、一行のMain-class入口を追加します。例えば、「Main-class:comp.packge.name.lassname」は、番号の後ろに空いているスペースがあるので、ファイルの最後の一行が空いています。
jarパッケージを実行するということは、jarパッケージを実行するMain-classのメーン関数です。だから、pythonでjavaメソッドを呼び出して、参加するなら、jarカバンを打つ前にMain-classの中のmain方法を修正します。Main-classはつまりターゲットjava類です。
Main-classのmain関数には、転送を設定できます。
String data=args[0];
String key=args[1];
//復号プログラムを起動し、復号結果を印刷します。
ここでdataは暗号文で、keyは鍵です。
pythonスクリプトを作成する
pythonスクリプトを書くことに対応しています。ここでpythonファイル名をaes.pyと設定します。私たちが復号するために使うjarパッケージ名をaes.jarと仮定します。

import subprocess
import chardet
import sys

class AES(object):
  def __init__(self, data, key):
    self.data = data
    self.key = key

  def decrypt(self):    
    command = "java -jar aes.jar"
    arg0 = self.data
    arg1 = self.key
    cmd = [command,arg0,arg1]
    new_cmd = " ".join(cmd)
    stdout,stderr = subprocess.Popen(new_cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE).communicate()
    encoding = chardet.detect(stdout)["encoding"]
    result = stdout.decode(encoding)
    return result

if __name__ == '__main__':
  data = sys.argv[1]
  key = sys.argv[2]
  AES = AES(data,key)
  print(AES.decrypt())
ここでは、jarパケットの2つの参照に対応するために、pythonスクリプトを設定するためには、2つのパラメータが必要であり、最初は復号されるデータdataであり、2番目は鍵keyを解読することである。
ここで私たちはaesフォルダを作成して、aes.pyとaes.jarをこのフォルダの下に置いて、同じaesルートディレクトリの下にあります。
そして、現在のディレクトリでcmdを起動し、pythonスクリプトを実行し、dataとkeyの二つのパラメータをpythonスクリプトに入力します。
python aes.py「解読対象文字列」「鍵」
pythonスクリプトでは、この二つのパラメータをjarパケットに転送し、JarパケットMain-classのmain関数で復号処理を呼び出して、復号結果を印刷します。
これにより、pythonでjavaの復号プログラムを呼び出すことができ、復号後の文字列が印刷されます。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。