【问题标题】:Is it possible to encrypt a bytes stream using PyCrypto?是否可以使用 PyCrypto 加密字节流?
【发布时间】:2020-02-28 05:56:16
【问题描述】:

我正在开发一个用户上传文件的应用程序,该应用程序会自动为他们处理文件。为了数据安全,我想加密这些文件。这些文件的大小可以从小到大(2MB 到 30MB 以上)不等。 我遇到了 PyCrypto 作为事实上的加密/解密包。这些文件在处理后被读入 io.BytesIO() ,然后从字节流中创建一个文件。我想知道是否可以“加密”字节流然后创建文件。这样当我将文件读入 io.Bytes() 时,我可以解密它并将文件提供给用户。

【问题讨论】:

  • 是的 - 你试过了吗?
  • 没有。我为 PyAesCrypt 尝试过,但该软件包没有很好的用户群。所以我很怀疑。我没有使用 PyCrypto 尝试过,因为我不知道如何进行。你能写出一个例子或一个sn-p吗?
  • PyCrypto 已被废弃,在 Python 3.8 中不起作用,最好的候选者是 pyca/cryptography。

标签: python django python-3.x pycrypto


【解决方案1】:

PyCrypto 已被废弃,在 Python 3.8 中无法使用,因此这项工作的最佳候选者是 pyca/cryptography,但如果你真的需要,你可以从以下内容开始:

from io import BytesIO

from Crypto import Random
from Crypto.Cipher import AES

payload = BytesIO(b"SomeData")

# Implement PKCS7 padding.
block_size = 16
length = payload.getbuffer().nbytes
to_pad = block_size - length % block_size
payload.seek(length)
payload.write((chr(to_pad) * to_pad).encode("utf8"))
payload.seek(0)

# Setup the cipher.
iv = Random.new().read(block_size)
cipher = AES.new(
    "16-CHAR-LENGTH__",  # Some secret.
    mode=AES.MODE_CBC,
    IV=iv,
)

encrypted = cipher.encrypt(payload.read())

【讨论】:

  • 您好,感谢您的回复。我还没试过这个。如果这对我有用,我会尽快通知你!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 2015-02-04
相关资源
最近更新 更多