【问题标题】:Python open source cryptographic toolkit [closed]Python开源加密工具包[关闭]
【发布时间】:2012-03-19 21:11:00
【问题描述】:

我的任务是在 2 个人和一个中间人之间建立安全通信。 必须使用公钥和私钥对消息进行加密,并且应该为每个用户创建一个 X.509 证书,该证书由第三方存储。 我目前正在通过套接字在用户之间发送消息。

有人能推荐一个易于理解的库,我可以用它来执行简单的加密吗?任何有关图书馆的适当阅读资源也会有所帮助。

【问题讨论】:

  • 一般的答案是“OpenSSL 加 Python 绑定”,但 Python 可能有更好的内置功能。
  • 由于我不是 python 专家,所以我不会将其发布为答案。我个人会选择 M2Crypto 包,它似乎支持使用 X509 证书进行加密。优点是它至少与 openssl 兼容,您可以从命令行使用它来创建 PKI(证书树)。似乎它至少被使用过,并且有一些文档。公平地说,python 中的加密状态似乎很糟糕。

标签: python encryption cryptography toolkit


【解决方案1】:

ssl:http://docs.python.org/dev/library/ssl.html

ssl.wrap_socket 将加密层添加到普通套接字。

this相关问题的答案中有一些代码示例:

client, addr = listeningSocket.accept()
client.recv(32)
client.send(b'hello')
client.setblocking(0)

while True:
    try:
        client.do_handshake()
        break
    except ssl.SSLError, err:
        if err.args[0] == ssl.SSL_ERROR_WANT_READ:
            select.select([client], [], [])
        elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE:
            select.select([], [client], [])
        else:
            raise

sslSocket = ssl.wrap_socket(client, do_handshake_on_connect=False, keyfile='key.pem', certfile='cert.pem', server_side=True, ssl_version=ssl.PROTOCOL_TLSv1)
sslSocket.write(b'hello')

【讨论】:

  • PyOpenSSL 实际上看起来文档很少,我想知道人们是否会提供更好的答案,但我可能最终会使用它。谢谢
  • 这看起来是我非常需要的。您知道我在哪里可以找到用作参考的示例代码吗?
  • 一个重要的警告:这只会加密通信通道,而不是消息。其运输安全。消息一旦到达套接字的另一端,就会被解密。在某些情况下,这是正确的事情,在其他情况下,则不是。例如,通过 SSL 向 gmail 发送电子邮件会阻止其他人阅读它,但 gmail 可以为所欲为。另一方面,在我的 x509 证书下加密相同的电子邮件并发送它,可以保护传输中和静止的消息。即使 gmail 被黑客入侵(再次)。
【解决方案2】:

呼应 CppLearner 的回复,如果您不介意缺少 x509 证书支持或自己添加,这就是您在 charm crypto 中的操作方式。来源为here 格式(以下代码中的导入可能有误,但链接代码确实有效)

from pkenc_adapt_hybrid import HybridEnc
from toolbox.eccurve import prime192v1
from schemes.pkenc_elgamal85 import * 
from toolbox.PKEnc import PKEnc

pkenc = ElGamal(ecc, prime192v1)
hyenc = HybridEnc(pkenc)

(pk, sk) = hyenc.keygen()

m = 'this is a new message'
cipher = hyenc.encrypt(pk, m)
orig_m = hyenc.decrypt(pk, sk, cipher)

【讨论】:

  • 重点是让我学习如何使用 x509 证书。
【解决方案3】:

【讨论】:

  • Charm 确实支持简单的安全加密,但它不支持 X509 证书,但由于它确实使用 openssl 实现其椭圆曲线,因此您可以很容易地提取 x509 数据并将其用作密钥材料。
【解决方案4】:

在尝试 PyOpenSSL 后,我最终使用了 M2Crypto PyOpenSSL 的问题在于它没有返回公钥的方法。我对此有很多问题。 M2Crypto 也有自己的加密方法,这意味着你不需要安装多个库:)

【讨论】:

    【解决方案5】:

    我们使用pycrypto 作为我们正在开发的产品(Versile Python,开源)的主要受支持的第 3 方加密子系统。 Versile Python 添加了对 X.509 证书的支持,请参见 example。您还可以从平台的 API 访问一些功能,请参阅 crypto doc

    【讨论】:

      猜你喜欢
      • 2010-11-23
      • 1970-01-01
      • 2010-09-12
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多