python 2.7 中的套接字错误,向客户端发送 public rsa 密钥

socket error in python 2.7, sending public rsa key to client

我正在使用 tcp 套接字编写使用 RSA 加密的客户端-服务器通信。我生成 public 和私钥,但是当我想在客户端和服务器之间交换 public 密钥时,我收到此错误:

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

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

感谢您的帮助!

您可以使用 Pickle 或 cPickle:

import cPickle
to_send=cPickle.dumps(the_key)
sock.send(to_send)

然后解开:

import cPickle
s=sock.recv()
key=cPickle.loads(s)