martes, 23 de julio de 2019

Tutorial como enviar correos con el estilo de Edward Snowden en Python (Parte 2)

Tutorial como enviar correos con el estilo de Edward Snowden en Python (Parte 2)


En la parte uno (1) nos quedamos boquiabiertos con la facilidad en la que se podían cifrar datos usando python junto GnuPG ahora venimos con la segunda (2) parte para aclarar más métodos que nos brinda este herramienta y para un extra enviaremos el mensaje cifrado a nuestra propia bandeja de entrada.

En algunas entradas de este blog ya se abarco sobre como enviar un mensaje por correo electrónico a través de python, sin embargo yo les quiero facilitar el trabajo. Me tome la molestia de crearles un modulo que no solo lo pueden usar para este ejemplo sino también para sus script's/programas propios.

El modulo lo pueden encontrar en mi repositorio de Github: "floppy - (https://github.com/DtxdF/floppy)".

Comencemos ...


Primero lo primero, descarguemos Floppy:

git clone https://github.com/DtxdF/floppy.git o Si no tenemos Git instalado descarguemos el zip entrando directamente desde nuestro navegador

Acedemos:

cd floppy

Ejecutamos python e importemos lo que necesitamos:

python

# -*- coding: UTF-8 -*-

import gnupg, floppy

# Ajustamos las variables:

gpg = gnupg.GPG()

# Variables de GnuPG

recipient = 'correo@dominio' # Recuerden una de las maneras para identificar las llaves de GnuPG es con la dirección del correo pero que tenemos importada en GnuPG, NO! la del correo electronico

# Variables relacionadas con el cliente

mensaje = 'Aquí iría tu mensaje'
mensaje = str(gpg.encrypt(mensaje, recipient).data)
asunto = 'Aquí nuestro asunto '
destinatario = 'correodeldestinatario@dominio.com' # En este caso como es una practica usemos el nuestro

# Variables para loguearnos y del servidor

email = 'nuestrocorreo@dominio.com'
passwd = 'nuestra contraseña'
smtp_server = 'el servidor SMTP que usaremos' # Si tienen una cuenta de GMAIL use: "smtp.gmail.com"
smtp_port = Puerto # Atentos!, el valor debe ser tipo entero (osea un número o en python int). En GMAIL es 587

smtp = floppy.smtp_interact(email, passwd, smtp_server, smtp_port)
smtp.connect()
smtp.login()
smtp.add_message(mensaje)
smtp.sendmail(destinatario, asunto)
smtp.close()

print("Hecho!")

Verifiquemos nuestra bandeja de entrada ...



Métodos de GnuPG

 Tal vez te preguntes "'¿Para esto nos emocionaste?", NO!, no solo para eso, también quiero que sepan los demás métodos de GnuPG para que aprovechen todo el potencial y puedan crear sus propios programas/script's de una forma eficaz.

Como ven ya hemos aprendido dos cosas: 1.- Cifrar datos; 2.- Enviarlo por correo electrónico; ¿Porque no aprender hasta tres cosas?:

Antes de continuar hay que aclarar:
  • data: Los datos/string/mensaje a usar
  • passphrase: Frase de contraseña
  • verify: Permite verificar datos en caso de un intento de suplantación o modificación involuntaria
  • amor: Permite imprimir/almacenar los datos en un formato legitimo
  • symmetric: Cifrar los datos con un algoritmo de cifrado simetrico (El cifrado simétrico quiere decir que hay solo una contraseña para cifrar y descrifrar, contrario al caso de asimétrico)
  • always_trust: Siempre confía en que es una identidad legitima, ya que es interesante como GnuPG tiene algo llamado un circulo de confianza que aumenta cada vez que agreguemos y verifiquemos una nueva llave
  • sign: Permite firmar los datos
  • recipient: El identificador de la clave pública de GnuPG
  • keyid: Prácticamente igual que recipients, solo que este acepta el identificador/id de la clave pública siendo este no un correo electrónico y se usa en otros métodos de GnuPG que ya les mencionare.
  • secret: En algunos métodos que veremos necesitamos acceder a las llaves secretas
  • expect_passphrase: En caso de que quieras exportar claves secretas es necesario que uses el parámetro passphrase, con este método puedes especificar si se requiere que se introduzca o no la frase de contraseña

import gnupg

gpg = gnupg.GPG()

Cifrar/Descifrar

gpg.encrypt(data=str, recipients=str, **kwargs)

o

gpg.encrypt(data=str, recipients=str, passphrase=str, sign=bool, symmetric=bool)

Nota: El parámetro passphrase se usa cuando el parámetro symmetric o sign le pasamos como argumento True
gpg.decrypt(message=str, **kwargs)

o

gpg.decrypt(message=str, passphrase=str, verify=bool, always_trust=bool)

Firmar/Verificar:

gpg.sign(message=str, **kwargs)

o

gpg.sign(message=str, keyid=str, passphrase=str)

Para verificar el mensaje firmado:

gpg.verify(data=str, **kwargs)

o

gpg.verify(data=str, keyid=str, passphrase=str)

Exportar/Importar:

gpg.export_keys(keyids=str, secret=bool, armor=bool, minimal=bool, passphrase=str, expect_passphrase=bool)

o

gpg.import_keys(key_data=str)

Fin ...

Quiero que experimenten, que se sumerjan en los sombríos y truculentos métodos y atributos que nos ofrece GnuPG. Usen la función dir(...) y help(...) como sus mejores amigos; Si requieren un tercer mejor amigo seré yo, pero tienen que comentármelo y por último si quieren una tercera (3) parte les enseñare como usar Tor en su cliente pero nuevamente les digo, déjenme su comentario para saberlo y preparar otra entrada.

Si necesitan leer más acerca del binario GPG, pueden hacer con la documentación en español: "GPG - (https://gnupg.org/gph/es/manual.html)

No hay comentarios :
Write comentarios

Tu comentario es importante y nos motiva a seguir escribiendo...

Powered by Blogger .