我的任务是在2人和中间人之间建立安全的沟通。 消息必须使用公钥和私钥加密,并且应为每个用户创建X.509证书,该证书由第三方存储。 我目前正在通过套接字在用户之间发送消息。
有人可以建议一个易于理解的库,我可以使用它来执行简单的加密吗?关于图书馆的任何适当的阅读资源也会有所帮助。
答案 0 :(得分:3)
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')
答案 1 :(得分:2)
回应CppLearner的回复,如果您不介意缺少x509证书支持或自己添加,请按照c harm 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)
答案 2 :(得分:0)
我们使用pycrypto作为我们正在开发的产品(Versile Python,开源)的主要支持第三方加密子系统。 Versile Python增加了对X.509证书的支持,请参阅此example。您还可以从平台的API访问某些功能,请参阅crypto doc。
答案 3 :(得分:0)
答案 4 :(得分:0)
我在尝试PyOpenSSL后最终使用了M2Crypto PyOpenSSL的问题在于它没有返回公钥的方法。我遇到了很多问题。 M2Crypto也有自己的加密方法,这意味着你不需要安装多个库:)