2011-10-30 18 views
1

私は、公開鍵をopensslからPythonを使用してエクスポートしようとしています。実際のキー情報はサーバーからクライアントに転送されていますが、PEMエンコーディングは転送されないため、クライアント上のキーは無用です。私は基本的にすべてをPythonで送信することを使用して公開鍵を送信しますが、残念ながらこれは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やUnicodeのような基本形式になっていることを確認してください。

関連する問題