我使用tcp套接字编程使用RSA加密的客户端 - 服务器通信。我生成公钥和私钥,但是当我想在客户端和服务器之间交换公钥时,我得到了这个错误:
TypeError:必须可转换为缓冲区,而不是PublicKey
这是服务器代码:
import socket
import rsa
print "Generating keys"
(public, private) = rsa.newkeys(1024, poolsize=2)
print "Keys generated."
tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
tcpSocket.bind(("0.0.0.0", 1025))
tcpSocket.listen(1)
print "Waiting for client..."
(client, (ip, port)) = tcpSocket.accept()
print "Connection received from: ", ip
client.send(public) #This is where I get the error
我也试过这条线:
client.send(str(public))
有了这个我可以发送公钥,但是我不能用它来加密数据(因为现在公钥是一个字符串)。
感谢您的帮助!
答案 0 :(得分:0)
您可以使用Pickle或cPickle:
import cPickle
to_send=cPickle.dumps(the_key)
sock.send(to_send)
然后解开它:
import cPickle
s=sock.recv()
key=cPickle.loads(s)