Foros del Web » Programando para Internet » Python »

Como firmar una publickey importada, para validarla [gnupg +python 2.7]

Estas en el tema de Como firmar una publickey importada, para validarla [gnupg +python 2.7] en el foro de Python en Foros del Web. Hola a todos Tengo una clase para cifrar un string con gnupg la clase funciona bien con mi propia key pero cuando importo otra key ...
  #1 (permalink)  
Antiguo 07/09/2012, 09:40
Avatar de mcun  
Fecha de Ingreso: octubre-2010
Ubicación: tras la pantalla
Mensajes: 466
Antigüedad: 14 años, 1 mes
Puntos: 55
Como firmar una publickey importada, para validarla [gnupg +python 2.7]

Hola a todos

Tengo una clase para cifrar un string con gnupg la clase funciona bien con mi propia key pero cuando
importo otra key e intento cifrar una mensaje con esa key la clase falla, el error es el siguiente

Código Python:
Ver original
  1. gpg: B7BB02D9: No hay seguridad de que esta clave pertenezca realmente
  2. al usuario que se nombra
  3. [GNUPG:] INV_RECP 10 user@dominio.com
  4. gpg: [stdin]: encryption failed: Unusable public key

La clase que utilizo es la siguiente

Código Python:
Ver original
  1. class EncryptedString():
  2.  
  3.  
  4.     def __init__(self,homegpg,user,set_result):
  5.  
  6.         self.homegpg = homegpg
  7.         self.user = user
  8.        
  9.         self.set_result = set_result
  10.     def encrypt_string(self,input_string):
  11.         #Encrypt a string
  12.         self.input_string = input_string
  13.         gpg  =  gnupg.GPG(gnupghome = self.homegpg)
  14.         unencrypted_string  =  self.input_string
  15.         encrypted_data  =  gpg.encrypt(unencrypted_string, self.user)
  16.         encrypted_string  =  str(encrypted_data)
  17.         ok =  encrypted_data.ok
  18.         status =  encrypted_data.status
  19.         stderr =  encrypted_data.stderr
  20.         result = [ok,status,stderr,unencrypted_string,encrypted_string]
  21.         return result[self.set_result]
  22.          
  23. # instantiate
  24. if __name__  ==  "__main__":
  25.     print "Is not shown if import"
  26.    
  27.     homegpg = '../home/gpg/'
  28.     user = '[email protected]'
  29.     input_string = 'string en texto plano'
  30.     set_result = 2
  31.     encryptstring = EncryptedString(homegpg,user,set_result)
  32.     print encryptstring.encrypt_string(input_string)
  33.     print " enjoy "

Buscando en google encontré que hay que firmar la clave importada con mi propia clave para que funcione correctamente,
pero no se como hacer eso.

La forma que uso para importar la calve es la siguiente

Código Python:
Ver original
  1. class ImportKey():
  2.  
  3.     def __init__(self,homegpg,keyfile):
  4.  
  5.         self.homegpg=homegpg
  6.         self.keyfile=keyfile
  7.  
  8.     def import_key(self):
  9.         #Import keys
  10.         gpg = gnupg.GPG(gnupghome=self.homegpg)
  11.         key_data = open(self.keyfile).read()
  12.        
  13.         import_result = gpg.import_keys(key_data)
  14.         pprint(import_result.results)
  15.        
  16.        
  17. # instantiate
  18. if __name__ == "__main__":
  19.     print "Is not shown if import"
  20.     homegpg='../home/gpg'
  21.     keyfile='../home/gpg/publickeyfile.asc'
  22.     importkey=ImportKey(homegpg,keyfile)
  23.     importkey.import_key()
  24.     print " enjoy "

Pese a haber leído la documentación[0] no me entero como firmar la clave importada. ¿ alguien tiene idea de como resolver esto ?



python 2.7

[0] http://packages.python.org/python-gnupg/


Gracias por leerme y si faltan datos pregunten
  #2 (permalink)  
Antiguo 07/09/2012, 10:54
Avatar de mcun  
Fecha de Ingreso: octubre-2010
Ubicación: tras la pantalla
Mensajes: 466
Antigüedad: 14 años, 1 mes
Puntos: 55
Respuesta: Como firmar una publickey importada, para validarla [gnupg +python 2.7]

Encontré una forma para poder cifrar un string con la publickey de otra persona y es agregando always_trust=True a la función gpg.encrypt, esto le indica a gnupg que la key es de confianza siempre.

entonces la modificación a mi clase seria


Código Python:
Ver original
  1. class EncryptedString():
  2. *
  3. *
  4. * * def __init__(self,homegpg,user,set_result):
  5. *
  6. * * * * self.homegpg = homegpg
  7. * * * * self.user = user
  8. * * * *
  9. * * * * self.set_result = set_result
  10. * * def encrypt_string(self,input_string):
  11. * * * * #Encrypt a string
  12. * * * * self.input_string = input_string
  13. * * * * gpg *= *gnupg.GPG(gnupghome = self.homegpg)
  14. * * * * unencrypted_string *= *self.input_string
  15.         # agregar en la siguiente linea always_trust=True
  16. * * * * encrypted_data  =  gpg.encrypt(unencrypted_string, self.user,always_trust=True)
  17. * * * * encrypted_string *= *str(encrypted_data)
  18. * * * * ok = *encrypted_data.ok
  19. * * * * status = *encrypted_data.status
  20. * * * * stderr = *encrypted_data.stderr
  21. * * * * result = [ok,status,stderr,unencrypted_string,encrypted_string]
  22. * * * * return result[self.set_result]
  23. * * * * *
  24. # instantiate
  25. if __name__ *== *"__main__":
  26. * * print "Is not shown if import"
  27. * *
  28. * * homegpg = '../home/gpg/'
  29. * * user = '[email protected]'
  30. * * input_string = 'string en texto plano'
  31. * * set_result = 2
  32. * * encryptstring = EncryptedString(homegpg,user,set_result)
  33. * * print encryptstring.encrypt_string(input_string)
  34. * * print " enjoy "

Espero sea útil

Etiquetas: firmar, gnupg, gui
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:00.