加密从Python请求到boto存储的流数据

加密从Python请求到boto存储的流数据,python,encryption,stream,python-requests,google-cloud-storage,Python,Encryption,Stream,Python Requests,Google Cloud Storage,我使用Python请求下载一个文件,然后立即通过boto将其上传到存储器。下载直接流式传输到boto,以避免将文件存储在本地。我想添加一个中间步骤,在下载流之后但在上传之前对其进行加密 请注意,这是上传到谷歌云存储,它支持流式上传 import boto import gcs_oauth2_boto_plugin import requests url = 'https://www.example.com/file.tar.gz' r = requests.get(url, stream=T

我使用Python请求下载一个文件,然后立即通过boto将其上传到存储器。下载直接流式传输到boto,以避免将文件存储在本地。我想添加一个中间步骤,在下载流之后但在上传之前对其进行加密

请注意,这是上传到谷歌云存储,它支持流式上传

import boto
import gcs_oauth2_boto_plugin
import requests

url = 'https://www.example.com/file.tar.gz'

r = requests.get(url, stream=True)

filename = 'file.tar.gz'
uri = boto.storage_uri(filename, 'gs')
uri.new_key().set_contents_from_stream(r.raw)

在传递流以从流中设置内容之前,迭代流并对其进行加密的最佳方式是什么?理想情况下,我将使用标准化的加密库,而不必自己实现任何加密代码。

python不提供内置的加密选项,但有 你可以使用很多好的软件包。python网站 建议使用pycrypto。这里有一个 您如何在应用程序中使用它的示例

import boto
import gcs_oauth2_boto_plugin
import requests
from Crypto.Cipher import DES

url = 'https://www.example.com/file.tar.gz'

r = requests.get(url, stream=True)

obj = DES.new("mysecretkey", DES.MODE_ECB)
encrypted_contents = obj.encrypt(r.raw)

filename = 'file.tar.gz'
uri = boto.storage_uri(filename, 'gs')
uri.new_key().set_contents_from_stream(encryped_contents)

那真的有效吗?r、 raw是一个流对象-加密方法能否正确处理它,然后将其作为流传递以从流中设置内容?我不确定。。。你需要进行实验。正如我所说,python不提供本机加密机制,pycrypto是一个很好的起点。最糟糕的情况是,您可能需要将其临时流式传输到磁盘,然后上载到boto存储。如果您绝对负担不起本地空间,那么您可以自行设计中间件,而不是成批递增加密和上传。当然,如果你有足够的RAM,你也可以把所有的东西都放到内存中,然后从那里上传。对不起,我帮不上什么忙,但我不太熟悉。