2011-10-30 3 views
1

나는 openssl에서 공개 키를 사용하여 공개 키를 내보내려고합니다. 실제 키 정보가 서버에서 클라이언트로 전송되었지만 PEM 인코딩이 전송되지 않아 클라이언트의 키가 쓸모가 없습니다. 나는 기본적으로 파이썬으로 모두 보내기를 사용하여 공개 키를 보내지만 불행히도 이것은 PEM 인코딩을 보내지 않습니다. 누구든지 인코딩을 전송하는 방법을 알고 있습니까? 인코딩이 키와 함께 전송되지 않는다는 것을 알지 못했습니다.공개 키를 인식하지 못했습니다.

내가 선 key = m2c.RSA.load_pub_key('serverPubKey.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() 

에서 읽을 수있는 코드입니다.

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

나는 이것이 PEM 형식이 아니기 때문이라고 생각했습니다. 불행히도, 나는 그것을 어떻게 그 형식으로 넣을 지 모른다.

답변

2

실수는 공개/개인 키 쌍이 동일한 래퍼에서 만들어야한다는 것이 었습니다. 이것이 의미하는 바는 모든 키 쌍이 동일하지 않다는 것입니다. 내 특정 문제는 Openssl 및 키 쌍의 M2Crypto 인스턴스가 동일한 기본 형식이 아니 었습니다. 따라서 Openssl로 키를 만든 다음 M2Crypto를 사용하여 키를 사용하려고 시도한 것은 잘못되었습니다. 이 모든 교훈은 다른 래퍼에서 키를 가져 오지 않는 것입니다. 그렇다면 ASCII 또는 유니 코드와 같은 기본 형식으로되어 있는지 확인한 후 사용하십시오.

관련 문제