python 2.7中的套接字错误,将公共rsa密钥发送到客户端

时间:2015-04-01 13:48:22

标签: python sockets python-2.7 encryption rsa

我使用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))

有了这个我可以发送公钥,但是我不能用它来加密数据(因为现在公钥是一个字符串)。

感谢您的帮助!

1 个答案:

答案 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)