公钥未被识别

问题描述:

我想从openssl使用python导出公钥。我将实际的密钥信息从服务器传输到客户端,但PEM编码未传输,因此客户端上的密钥无用。我基本上使用发送全部使用python发送公钥,但不幸的是这不会发送PEM编码。有谁知道如何传输编码? 我不知道编码不会与密钥一起传输。公钥未被识别

在字符串中

import socket 

import M2Crypto as m2c 
import os 

max_transfer_block = 1024 
server_addr = "10.1.1.2" 
dest_port = 3333 
listen_port = 8888 
client_addr = "10.1.1.3" 
mysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
mysocket.connect((server_addr, dest_port)) 

#receive the public key from the server 
keysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
keysocket.bind((client_addr, listen_port)) 
keysocket.listen(1) 
conn, client_addr = keysocket.accept() 
print 'connected by', client_addr 
data = conn.recv(max_transfer_block) 
#FILE = m2c.RSA.save_pub_key(data, "serverPubKey.pem") 

FILE = open("sPub.pem", "w") 
FILE.write(data) 
keysocket.close()  

#transfer encrypted file 
key = m2c.RSA.load_pub_key('serverPubKey.pem') 
FILE = open("test.txt", "r") 

data = FILE.read() 

encrypted = key.public_encrypt(data, m2c.RSA.pkcs1_padding) 

mysocket.sendall(encrypted) 
mysocket.close() 

阅读当我用线key = m2c.RSA.load_pub_key('serverPubKey.pem')我得到一个错误,告诉我,有没有起点的代码。

raise RSAError, m2.err_reason_error_string(m2.err_get_error()) M2Crypto.RSA.RSAError: no start line 

我发现这是因为没有PEM格式。不幸的是,我不知道如何把它放在这种格式中。

错误在于公钥/私钥对需要使用相同的包装器创建。我的意思是,并非所有的密钥对都是一样的。我的具体问题是Openssl和密钥对的M2Crypto实例不是相同的基础格式。因此,用Openssl创建密钥,然后尝试使用M2Crypto来使用密钥是错误的。所有这一切的教训是不要从其他包装器导入密钥。如果你这样做,在尝试使用它们之前,确保它们使用相同的底层格式,如ASCII或Unicode。