2012-02-08 30 views
15

Estoy usando PyCrypto 2.3 y me gustaría guardar las claves que he generado en un archivo, para distribuirlas al cliente y al servidor. Parece que no puedo encontrar la manera correcta de imprimir las claves, tampoco puedo encontrar ejemplos en Internet.Guardar claves RSA en un archivo, usando pycrypto

def resetKeys(self): 
     keys = RSA.generate(1024) 

     privHandle = open(self.privateKeyFile, 'wb') 
     privHandle.write(keys.privatekey()) 
     privHandle.close() 

     pubHandle = open(self.publicKeyFile, 'wb') 
     pubHandle.write(keys.publickey()) 
     pubHandle.close() 

Este código no funciona por muchas razones: en primer lugar, keys.publickey() no parece ser imprimibles, devuelve:

<_RSAobj @0x10f810d0 n(1024),e> 

y en segundo lugar, keys no tiene ninguna función llamada privatekey.

¿Alguien ha hecho eso antes?

Respuesta

28

keys.exportKey() para la clave privada, keys.publickey().exportKey() para la clave pública. Puede cambiar el formato de salida con el argumento format, consulte docs at this site.

+1

Ok, encontraron el documento de 'exportKey' después de algunas investigaciones. Está en la documentación de _RSAobj. Haga clic en 'mostrar privado' para verlo. – qdii

+0

Ahora que los ha exportado a un archivo, cuando lee el archivo, ¿hay alguna manera de importarlos a python/pycrypto? –

+3

@CharlieParker 'RSA.importKey' – wRAR

1

La siguiente pieza de código creará el par de claves RSA y las almacenará en archivos PEM, además de imprimirlas.

créditos originales: wRAR de este post & Poultier AJ de [pyOpenSSL creating a pem file

from Crypto.PublicKey import RSA 
private_key = RSA.generate(1024) 
public_key = private_key.publickey() 
print(private_key.exportKey(format='PEM')) 
print(public_key.exportKey(format='PEM')) 

with open ("private.pem", "w") as prv_file: 
    print("{}".format(private_key.exportKey()), file=prv_file) 

with open ("public.pem", "w") as pub_file: 
    print("{}".format(public_key.exportKey()), file=pub_file) 
Cuestiones relacionadas