Открытый ключ не распознан - PullRequest
1 голос
/ 30 октября 2011

Я пытаюсь экспортировать открытый ключ из openssl, используя python. У меня есть фактическая информация о ключе, переданная клиенту с сервера, но кодировка PEM не передается, поэтому ключ на клиенте бесполезен. Я в основном посылаю открытый ключ, используя send all на 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. К сожалению, я не знаю, как выразить это в таком формате.

1 Ответ

2 голосов
/ 07 ноября 2011

Ошибка состояла в том, что пару открытый / закрытый ключ необходимо создать из одной и той же оболочки. Под этим я подразумеваю, что не все пары ключей одинаковы. Моя конкретная проблема заключалась в том, что экземпляры пар ключей Openssl и M2Crypto не были в одном базовом формате. Таким образом, создавать ключи с помощью Openssl, а затем пытаться использовать M2Crypto для использования ключей, было неправильно. Урок всего этого - не импортировать ключи из других оболочек. Если вы это сделаете, убедитесь, что они имеют тот же базовый формат, что и ASCII или Unicode, прежде чем пытаться их использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...