1

Jython(mac osx lion)を使用してPythonクラスをJavaバイトコードに変換しようとしています

./jython -m compileall /Users/owengerig/Downloads/Code \ Downloads / cryptPYTHON.py

しかし、このエラーが発生します。これにより、何が問題になっているのかがわかりません。

/Users/owengerig/Downloads/Code Downloads /cryptPYTHON.pyを一覧表示しています.../Users / owengerig / Downloads / Code Downloads/cryptPYTHON.pyを一覧表示できません

私のPythonクラスの設定方法(この投稿を例として使用):

from Crypto.Cipher import AES
import base64
import os

class Crypticle(CryptInterface):
    """Authenticated encryption class

     * @param string    $key      base64-encoded encryption key
     * @param integer   $key_len  length of raw key in bits

    Encryption algorithm: AES-CBC
    Signing algorithm: HMAC-SHA256
    """

    AES_BLOCK_SIZE = 16

    @JAVA
    def __init__(self, key_string, key_size=192):
        assert not key_size % 8
        self.key = self.extract_key(key_string, key_size)
        self.key_size = key_size

    @classmethod
    def generate_key_string(cls, key_size=192):
        key = os.urandom(key_size / 8)
        return base64.urlsafe_b64encode(str(key))

    @classmethod
    def extract_key(cls, key_string, key_size):
        key = base64.urlsafe_b64decode(str(key_string))
        assert len(key) == key_size / 8, "invalid key"
        return key

    @JAVA(String, String)    
    def encrypt(self, data):
        """encrypt data with AES-CBC"""
        aes_key = self.key
        pad = self.AES_BLOCK_SIZE - len(data) % self.AES_BLOCK_SIZE
        data = data + pad * chr(pad)
        iv_bytes = os.urandom(self.AES_BLOCK_SIZE)
        cypher = AES.new(aes_key, AES.MODE_CBC, iv_bytes)
        data = iv_bytes + cypher.encrypt(data)
        data_str = base64.urlsafe_b64encode(str(data))
        return data_str

    @JAVA(String, String)  
    def decrypt(self, data_str):
        """decrypt data with AES-CBC"""
        aes_key = self.key
        data = base64.urlsafe_b64decode(data_str)
        iv_bytes = data[:self.AES_BLOCK_SIZE]
        data = data[self.AES_BLOCK_SIZE:]
        cypher = AES.new(aes_key, AES.MODE_CBC, iv_bytes)
        data = cypher.decrypt(data)
        return data[:-ord(data[-1])]

また、このコードを試しましたが(以下のコメントごとに)、同じエラーが発生します:

class Employee(Object):
   def __init__(self):
      self.first = "Josh"
      self.last  = "Juneau"
      self.id = "myempid"

   def getEmployeeFirst(self):
      return self.first

   def getEmployeeLast(self):
      return self.last

   def getEmployeeId(self):
      return self.id
4

1 に答える 1

3

-m compileallは、ファイル名ではなくディレクトリを取ります。したがって、以下を実行する必要があります。

./jython -m compileall /Users/owengerig/Downloads/Code\ Downloads/

長い説明

jythondirectory /Lib/compileall.pyを開くと、次のようになります。

try:
    names = os.listdir(dir)
except os.error:
    print "Can't list", dir
    names = []

os.listdir()は、引数としてディレクトリが渡されない場合、エラーをスローします。これはコマンドライン引数のコンパイルに使用される関数であり、main()関数は引数がディレクトリであるかどうかをチェックしないため、これは失敗します。

        for dir in args:
            if not compile_dir(dir, maxlevels, ddir,
                               force, rx, quiet):
                success = 0

/長い説明

于 2012-06-18T21:54:59.613 に答える