Login en un programa hecho en C

Imagina que tienes un programa hecho en C que sirve para desencriptar passwords. Ahora imagina que no quieres que lo utilice nadie mas que aquellos usuarios que sepan una password. Muchos pensarán que con asignar al binario unos permisos chmod y chown adecuados sería suficiente. Nunca es suficiente. Por ello, hoy voy a explicar una manera de añadir a nuestro programa un simple sistema de autenticación que funciona bien. Este es el código de mi archivo fuente softwareConLogin.c:

/* Compilacion:	gcc -std=gnu99 -Wall -c -MMD -MP -MF"softwareConLogin.d" -MT"softwareConLogin.d" -o "softwareConLogin.o" softwareConLogin.c
 * 		gcc -o softwareConLogin softwareConLogin.o -lcrypt
 */

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <crypt.h>
 
int main(void) {
	const char * const pass = "$1$Fw1PJ/2K$KhVip8FBuJMNXpZh.XqGX.";
	char *result;
	int ok;
 
	result = crypt(getpass("Password: "), pass);
	ok = strcmp(result, pass) == 0;
 
	puts(ok ? "Correcto!" : "Password erronea");
	return ok ? 0 : 1;
}

En este programa de ejemplo he utilizado una librería llamada crypt.h (cortesía de la FSF) por lo que tendremos que especificarlo a la hora de compilarlo con el flag -lcrypt.

Fijaos bien en la siguiente línea:

const char * const pass = "$1$Fw1PJ/2K$KhVip8FBuJMNXpZh.XqGX.";

Esa es nuestra password encriptada. ¿Podríamos ponerla en claro?, si pero cualquiera que tenga acceso al código fuente o a un buen decompilador podría ver cual es nuestra password, y eso no nos interesa. Lo que he hecho ha sido meter en el código fuente la password ya encriptada mediante un método de encriptación MD5/DES que ya expliqué otro el otro día. De este modo, al ejecutar nuestro software lo primero que nos va a pedir es una Password, y si se introduce correctamente el programa continuará, de lo contrario, dará un error de autenticación y finalizará. Se puede mejorar mucho, por ejemplo, añadiendo número de intentos, un usuario además de la password (también encriptado), etc. En unos días pondré una versión mejorada con todo esto y mas.

Un comentario en “Login en un programa hecho en C”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.