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 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 ...
# -*- 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
- 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
Cifrar/Descifrar
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 ...
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)
Tutorial como enviar correos con el estilo de Edward Snowden en Python (Parte 1)
Tutorial como enviar correos con el estilo de Edward Snowden en Python (Parte 1)
GNUPG (GNU Privacy Guard)
Sistema de clave pública o asimétrico
Que empiece el juego ...
Un resumen de toda la explicación es que necesitaremos:
- Dos claves: Una Pública y Una Privada
- Pública: Se la envías a el que quieras que te envíe un mensaje cifrado
- Privada: La tendrás y nunca la revelaras
- Necesitamos la clave pública de la persona que queremos enviar el mensaje. En mi caso y también en el tuyo para este ejemplo usa tu misma clave pública
Instalación:
# Primero instalamos GNUPG en nuestra distribución/Sistema operativo y luego lo instalamos para python
sudo apt-get install gpg
sudo pip install python-gnupg
# Generamos nuestras llaves. En este paso nos mostrara información que tenemos que rellenar, como correo electrónico (No es necesario que coloques el de gmail, hotmail, etc; puede ser uno inventado pero procura que sea único o poco conocido), nombre y apellido, comentarios, etc.
gpg --gen-key
...
# Ejecutamos python y empezamos a usarlo
from gnupg import GPG # Importamos el modulo gpg = GPG() # Como esto es manejado por objetos creamos una variable llamada gpg y empezamos a escribir y usar sus atributos, metodos, etc dato = 'Hola!, soy un mensaje que sera cifrado :D ...' # Creamos una variable que contendrá el dato a cifrar encrypted = gpg.encrypt(dato, "prueba@ejemplo.org") # Creamos una variable llamada encrypted que cifrara la variable dato usando como destinatario prueba@ejemplo.org. Tengo que aclarar que es una dirección de prueba a la que se la quieren enviar print(encrypted.data) # Usamos el atributo de la instancia para poder leer el dato cifrado. verán que les mostrara un mensaje ilegible decrypted = gpg.decrypt(encrypted.data, "1234567890abc") # Ahora supongamos que somos el receptor del mensaje. Colocaremos como primer argumento el dato cifrado que nos enviaron por correo y segundo parámetro la clave de descifrado print(encrypted.data) # Imprimimos el dato print(encrypted.data == dato) # Comparamos si el dato decifrado es igual a la variable dato
Imágenes:
Espero les guste, mientras se familiarizan con la criptografia asimétrica, háganme comentarios si desean una segunda parte donde comenzaremos a crear nuestro cliente de correo electrónico con cifrado asimétrico y veremos a fondo lo que nos trae GPG usando solamente python (Como generar claves desde python, firmar datos, entre otros).
- DtxdF
-
Excelente. En estos días ya no se respeta la privacidad y esto ayuda a que no se vulneren nuestros mensajes privados.
Muchas gracias.-
Muchas gracias por tu comentario. Tienes totalmente la razón, falta la parte 2 (dos) donde explico mucho más y ademas de como enviarlo por correo electrónico u otro medio de comunicación.
-
-
Excelente aporte... seria interesante la parte 2 de crear un cliente de correo con python
-
Interesante y muy necesario el cifrado con GPG de nuestro correos, por lo que veo gmail no cifra nuestros email y cualquier persona con el conocimiento necesario los puede leer, ¿o estoy equivocado?.
-
Es sumamente importante este u otro algoritmo de cifrado robusto, pero la discusión radica en que la conexión ya esta cifrada con starttls/tls, pero eso lo único que nos resguarda es de que un intermediario (Atacante-Hacker malicioso), no nos intercepte los mensajes en el envío, el problema esta en Google u otra organización/empresa/compañía/etc; Ya que ellos a pesar de que tengan sus propios cifrados dentro de sus aplicaciones, pueden visualizar nuestro mensajes e incluso una persona que entrara a nuestra cuenta (Ejemplo: Nos roben el teléfono y tengamos la sesión de Gmail abierta); Si usamos esta técnica evitamos esto, "Al menos hasta que se logre hacer una computadora cuántica y usen el algoritmo de Shor".
-
-
Motivos para seguir creyendo en la especie humana...
Encontrarse a personas cómo tú!
Gracias! -
¡Muchas gracias! Y disculpa por no haber leído el mensaje a tiempo.
Es un placer cómo siempre 😀
-
Cuando podrá salir la 2parte
-
Ya está querido lector: https://www.pythondiario.com/2019/07/tutorial-como-enviar-correos-con-el_23.html
-
Deja una respuesta
Deja una respuesta