Encriptar cadenas con MD5/DES en C

Voy a explicar un simple ejemplo de programa en C para encriptar cadenas que se podrán usar a posteriori para securizar el uso de nuestros programas una vez compilados. Es muy sencillo y es una práctica que todos deberíamos ir adquiriendo, y en los tiempos que corren mas que nunca. Para ello he creado un archivo fuente encriptaCadena.c con el siguiente código:

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

#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <crypt.h>
 
int main(void) {
	unsigned long seed[2];
	char salt[] = "$1$3xe26505";
	const char * const seedchars = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	char *cadena;
	int i;
 
	seed[0] = time(NULL);
	seed[1] = getpid() ^ (seed[0] >> 14 & 0x30000);
 
	for (i = 0; i < 8; i++) {
		salt[3 + i] = seedchars[(seed[i / 5] >> (i % 5) * 6) & 0x3f];
	}
 
	cadena= crypt(getpass("Cadena: "), salt);
 
	puts(cadena);
	return 0;
}

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. Una vez compilado lo podemos usar de la siguiente manera (ejemplo en un sistema GNU/Linux o Unix):

./encriptaCadena HolaQueTal
$1$Fw1PJ/2K$KhVip8FBuJMNXpZh.XqGX.

Como se puede ver, la ejecución del programa devuelve una cadena encriptada $1$Fw1PJ/2K$KhVip8FBuJMNXpZh.XqGX. que podremos utilizar para validar una password de autenticación en otro programa que pida un Login. Esto es Free Software, compártelo.

Un comentario en “Encriptar cadenas con MD5/DES 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.