💾 Archived View for sl1200.dystopic.world › art › contactos.gmi captured on 2023-01-29 at 02:59:57. Gemini links have been rewritten to link to archived content
-=-=-=-=-=-=-
2022-09-01
#contactos #cifrado #bash #terminal #linux
Quería una agenda de contactos cifrada y extremadamente sencilla apoyada en un archivo de fácil cifrado y descifrado. Para ello me he apoyado en estos comandos:
- select, para crear un menú.
- ccrypt, para cifrar. Si no lo tienes, instálalo.
- less, para visualizar el contenido de la salida de ccat (ccrypt) y hacer búsquedas en los contactos
- sed, para poder eliminar contactos a partir de su nombre.
- sort, para ordenar alfabéticamente la salida.
- column, para que la visualización de columnas sea adecuada.
En el proceso de entrada y eliminación de contactos he reducido a un instante el tiempo durante el cual el archivo de contactos existe descifrado en el pc, y para la visualización y búsqueda de contactos, con ccat y less ni tan siquiera llega a generarse el archivo descifrado. Es lo más cercano que he encontrado a lo que sería eso que llaman "cifrado homomórfico", que todavía parece que no existe.
Para empezar deberás crear el archivo de contactos y cifrarlo manualmente con ccencrypt, por ejemplo el archivo ~/Documentos/contactos, tras cifrarlo el archivo quedará como contactos.cpt
Para que ccrypt lea automáticamente la contraseña de cifrado para la creación o eliminación de contactos, deberás crear un archivo cuya primera línea será la contraseña, en mi caso es el archivo ~/Documentos/clave.key. A ese archivo dale permiso de lectura y escritura sólo para tu usuario, con "chmod 600 clave.key". Para la lectura y búsqueda de contactos sí que deberás introducir la contraseña. No es del todo seguro pero si nadie se loguea por tí en tu PC supongo que no habrá ningún problema, y si extraen tu archivo de contactos, pues estará cifrado.
Si seleccionas la opción de visualizar contactos, la pantalla se pondrá en negro, introduce entonces la contraseña de cifrado y visualizarás el contenido del archivo de contactos. También podrás buscar y moverte por el listado de contactos con estas opciones, que son las del comando less:
- /palabra Para hacer una búsqueda, se resaltarán los resultados
- n Se va al siguiente resultado de búsqueda
- N Se va al anterior resultado de búsqueda
- q Salimos al prompt
- g Ir al principio
- 20g Ir a la línea 20
- G Ir al final del documento
- 45p o 45% Ir al 45% del documento
- j,k, 10j,5j,3k... Como en VIM, j,k nos movemos hacia abajo o arriba
Este es el script, crea un archivo en un directorio que esté incluido en el $PATH para que sea ejecutable desde cualquier directorio. En mi caso tengo el script en el archivo ~/bin/contactos . Copia el contenido del script en ese archivo y haz el archivo ejecutable con 'chmod +x contactos'.
Y ya está, ejecuta 'contactos' y ya tienes una agenda telefónica cifrada.
#!/bin/bash #Creamos un menú con select echo -e "\n=====AGENDA DE CONTACTOS CIFRADA=====\n" PS3="Selecciona una opción: " select opt in "- Añadir un contacto " "- Eliminar contacto " "- Mostrar contactos " "- Salir "; do case $opt in "- Añadir un contacto ") echo -e "\n=== AÑADE UN CONTACTO ===\n" #introducimos los datos del contacto read -p " Nombre y apellidos : " name read -p " Teléfono fijo : " phone read -p " Teléfono móvil : " mobile read -p " email : " email read -p " Otros : " other #desciframos el archivo de contactos cifrado ccdecrypt --keyfile ~/Documentos/clave.key ~/Documentos/contactos.cpt #añadimos línea en el archivo de contactos con el nuevo contacto echo $name";"$phone";"$mobile";"$email";"$other >> ~/Documentos/contactos #como daremos a intro para saltar algunos campos, sustituimos ;; por ;-; sed -i 's/;;/;-;/g' ~/Documentos/contactos #ciframos el archivo de nuevo ccencrypt --keyfile ~/Documentos/clave.key ~/Documentos/contactos ;; "- Eliminar contacto ") read -p "Nombre del contacto a eliminar : " remove #desciframos el archivo de contactos cifrado ccdecrypt --keyfile ~/Documentos/clave.key ~/Documentos/contactos.cpt #eliminamos la línea corresponciente al contacto a eliminar sed -i "/^${remove}/d" ~/Documentos/contactos #ciframos el archivo de nuevo ccencrypt --keyfile ~/Documentos/clave.key ~/Documentos/contactos ;; "- Mostrar contactos ") ccat -k - ~/Documentos/contactos.cpt | sort | column -t -s ";" | less ;; "- Salir ") echo -e "\nSu agenda de contactos está cifrada.\nHasta luego.\n" break ;; *) echo "$REPLY no es una opción válida" ;; esac done