1

Pythonを使用してopensslから公開鍵をエクスポートしようとしています。サーバーからクライアントに実際のキー情報を転送しましたが、PEMエンコーディングが転送されないため、クライアントのキーは役に立ちません。私は基本的にPythonでsendallを使用して公開鍵を送信しますが、残念ながらこれは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形式ではないためだと思いました。残念ながら、その形式にする方法がわかりません。

4

1 に答える 1

2

誤りは、公開鍵と秘密鍵のペアを同じラッパーから作成する必要があることです。つまり、すべての鍵ペアが同じというわけではありません。私の具体的な問題は、鍵ペアの Openssl と M2Crypto インスタンスが同じ基礎となる形式ではないことでした。したがって、Openssl でキーを作成し、M2Crypto を使用してキーを使用しようとするのは間違っていました。これらすべてからの教訓は、他のラッパーからキーをインポートしないことです。その場合は、それらを使用する前に、それらが ASCII や Unicode などの同じ基礎となる形式であることを確認してください。

于 2011-11-07T16:39:10.107 に答える