Google App Engine开发服务器中的PyCrypto“ImportError:无法导入名称blockalgo”

时间:2012-06-28 20:31:10

标签: python google-app-engine jinja2 pycrypto

我有一个使用PyCrypto用AES加密字符串的函数。当我在单元测试中调用该函数时,一切正常。在生产环境中,它也可以正常工作。但是,在GAE开发服务器上调用该函数时,会引发错误:“ImportError:无法导入名称blockalgo”。我在Windows 7(64位)和Mac OS 10.5上测试过它。两者都导致了同样的错误。我正在使用带有Python 2.7的Google App Engine。可能是什么问题?

的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 个答案:

答案 0 :(得分:5)

确保本地系统上安装的PyCrypto版本与app.yaml中指定的版本相同。在将软件包升级到最新版本之前请三思而后行。