【问题标题】:Encrypting streaming data from Python requests to boto storage加密从 Python 请求到 boto 存储的流数据
【发布时间】:2014-12-22 13:21:35
【问题描述】:

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

请注意,这是上传到支持流式上传的 Google Cloud Storage。

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)

在将流传递给 set_contents_from_stream() 之前,迭代流并对其进行加密的最佳方法是什么?理想情况下,我会使用标准化的加密库,而不必自己实现任何加密代码。

【问题讨论】:

    标签: python encryption stream python-requests google-cloud-storage


    【解决方案1】:

    python 不提供内置加密,但有 你可以使用很多好的包。蟒蛇网站 推荐 pycrypto http://www.pycrypto.org。这是一个 如何在应用程序中使用它的示例

    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 是一个流对象 - Crypto encrypt() 方法可以正确处理它,然后将其作为流传递给 set_contents_from_stream()?
    • 我不确定...您需要进行实验。正如我所说,python 没有提供本地加密机制,而 pycrypto 是一个很好的起点。最坏的情况,您可能需要暂时将其流式传输到磁盘,然后上传到 boto 存储。如果您绝对负担不起本地空间,您可以制作自己的中间件,而不是增量加密和分块上传。当然,如果您有足够的 RAM,您也可以将所有内容都吸入内存并从那里上传。抱歉,我无法提供更多帮助,但对 boto 不熟悉。
    猜你喜欢
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 2012-04-07
    • 2020-01-18
    • 1970-01-01
    • 2015-06-12
    • 2016-02-08
    相关资源
    最近更新 更多