2012-06-28 21 views
5

PyCryptoを使用してAESで文字列を暗号化する機能があります。単体テストでその関数を呼び出すと、すべて正常に動作します。運用環境では、正常に動作します。ただし、関数がGAE開発サーバー上で呼び出されると、 "ImportError:name blockalgoをインポートできません"というエラーがスローされます。 Windows 7(64ビット)とMac OS 10.5でテストしました。両方とも同じエラーが発生しました。 Python 2.7でGoogle App Engineを使用しています。何が問題なの?Google App Engine開発サーバーのPyCrypto「ImportError:名前blockalgoをインポートできません」

app.yamlを

application: xxx 
version: 6 
runtime: python27 
api_version: 1 
threadsafe: true 

libraries: 
- name: django 
    version: "1.2" 
- name: webapp2 
    version: "2.3" 
- name: jinja2 
    version: "2.6" 
- name: pycrypto 
    version: "2.3" 
- name: PIL 
    version: "1.1.7" 

builtins: 
- appstats: on 
- remote_api: on 

inbound_services: 
- mail 
- warmup 

暗号化機能:

def encrypt(plaintext): 
    from Crypto.Cipher import AES 
    import hashlib 

    password = 'xxx' 
    key = hashlib.sha256(password).digest() 

    mode = AES.MODE_ECB 
    encryptor = AES.new(key, mode) 

    BLOCK_SIZE = 16 
    PADDING = '{' 
    pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING 
    EncodeAES = lambda c, s: b58encode(c.encrypt(pad(s))) 

    encrypted = EncodeAES(encryptor, plaintext) 

    if len(encrypted) < 22: 
     for i in range (len(encrypted), 22): 
      encrypted += "_" 
    return encrypted 
+1

あなたはapp.yamlといくつかのコードを表示する必要があります。 – Chris

答えて

5

ローカルシステムにインストールされているPyCryptoのバージョンはapp.yamlをで指定されたバージョンと同じであることを確認してください。パッケージを最新のバージョンにアップグレードする前に、2回考えてください。

+0

ちなみに、ここでv2.3をダウンロードすることができます:https://github.com/dlitz/pycrypto/tags –

+0

私にはうまくいったが、私は驚いた:GAEライブラリのサポートとは異なり、インストールする必要があるあなた自身。法的理由? – ckhan

関連する問題