我正在尝试使用python从openssl导出公钥。我有从服务器传输到客户端的实际密钥信息,但PEM编码没有传输,因此客户端上的密钥是无用的。我基本上使用python中的send all发送公钥,但不幸的是,这不会发送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格式。不幸的是,我不知道如何把它放在那种格式中。
答案 0 :(得分:2)
错误在于需要从同一个包装器创建公钥/私钥对。我的意思是并非所有的密钥对都是一样的。我的具体问题是Openssl和密钥对的M2Crypto实例不是相同的底层格式。因此,使用Openssl创建密钥然后尝试使用M2Crypto来使用密钥是错误的。所有这一切的教训是不从其他包装器导入密钥。如果这样做,请在尝试使用它们之前确保它们使用相同的基础格式,如ASCII或Unicode。