我使用AWS拉姆达使得服务。我使用PyCryptodome用于加密和解密。我可以在本地测试我的应用程序,但是当我上传到AWS lambda进行解密时。我收到错误信息
模块初始化错误:无法加载本机模块“ Crypto.Cipher._raw_ecb”:尝试“ _raw_ecb.cpython-36m-x86_64-linux-gnu.so”:/var/task/Cryptodome/Util/../Cipher/ _raw_ecb.cpython-36m-x86_64-linux-gnu.so:无法打开共享对象文件:无此类文件或目录,尝试“ _raw_ecb.abi3.so”:/var/task/Cryptodome/Util/../Cipher/_raw_ecb .abi3.so:无法打开共享的对象文件:没有这样的文件或目录,尝试“ _raw_ecb.so”:/var/task/Cryptodome/Util/../Cipher/_raw_ecb.so:无效的ELF标头
我要解密的代码是
def blowfish_decrypt(enc):
secret_key = b"somestring"
iv = b"somerandomiv"
logger.info("in the decrypter")
crypt_obj = bf_cbc.new(secret_key, bf_cbc.MODE_CBC, IV=iv)
original = crypt_obj.decrypt(base64.b64decode(enc))
original = original.decode("utf-8")
logger.info("decrypted")
return original
我在以下资源:https://github.com/pyinstaller/pyinstaller/issues/2125,但这并没有帮助我为
应用了指定的所有细节后,我得到了上述相同的错误。
答案 0 :(得分:2)
您的本地开发环境似乎与Lambda执行环境不兼容。 PyCryptodome使用的本机库不能在这两种环境之间移植;与在哪个环境中安装pip库有关。
一种修复它的方法是使用Lambci docker image来构建库,然后将其添加到zip文件中。假设您已经安装了Docker,请
docker pull lambci/lambda:build-python3.6
docker run --rm -v `pwd`:/var/task lambci/lambda:build-python3.6 pip install pycryptodome -t pycryptodome
这将在docker环境中pip安装lib。命令完成后,您可以在pycryptodome本地目录中使用它。
以更自动化/可重复的方式,查看AWS SAM和aws-sam-cli,它们为您提供了一些非常有用的命令来构建,打包和部署Lambda应用程序。
答案 1 :(得分:2)
之所以发生这种情况,是因为本地计算机上安装的pycryptodome模块与lambda不兼容。因此,有两种方法可以解决此问题。
请确保遵循以下指导来创建lambda图层包。 Import libraries in lambda layers
答案 2 :(得分:0)
我已在AWS Lambda上成功安装并运行cryptodome 3.9.4(仅适用于Python 3.6)。
我将包放在github中。必须将其放入您的微服务中。
https://github.com/grmagalhaes/python-utilities/tree/master/Crypto