2015-04-01 42 views
1

我使用tcp套接字編程使用RSA加密的客戶端 - 服務器通信。我生成公鑰和私鑰,但是當我想客戶端和服務器之間交換的公共密鑰我得到這個錯誤:Python 2.7中的套接字錯誤,向客戶端發送公共rsa密鑰

類型錯誤:必須可以轉換成一個緩衝,不公鑰

這是服務器端的代碼:

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

有了這個,我可以把在p ublic鍵,但是我不能用它來加密數據(因爲現在公鑰是一個字符串)。

謝謝你的幫助!

回答

0

您可以使用味酸或cPickle的:

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

再unpickle它:

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

正是我需要的,謝謝。我有一個問題pickleing公鑰,但我解決了這個帖子:http://stackoverflow.com/questions/2204155/why-am-i-getting-an-error-about-my-class-defining-slots - 當 - 試圖對pickl – lapatatandante 2015-04-01 15:31:30