Un programa sencillo para generar llaves
De NetBSD Mexico Wiki, la enciclopedia libre.
Programa para generar llaves de buena calidad
Para compilar:
cc kgen.c -o kgen
Modo de uso:
./kgen [-b bits] [-d /dev/random]
Ejemplo para generar una llave de 104 bits:
./kgen -b 104 -d /dev/urandom
Aqui va el programa
/* $NetBSD$ */
/*
* kgen.c version 0.0 (inicial)
* Programa para generar llaves de buena calidad en formato
* exadecimal. (c) 2007 Heron Gallegos
*/
/*
* Licencia
* Este programa lo puede usted copiar, lo puede modificar, lo puede
* regalar, lo puede vender, lo puede fiar, lo puede quemar, lo puede
* borrar, lo puede introducir donde mas sabroso sienta
* nomas no vaya a andar diciendo que usted lo escribio
*/
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define RNDFIL "/dev/random"
main (int argc, char **argv) {
int ch, bits = 40, bytes = 5;
char rndfil[64];
unsigned char mybuf[16];
FILE *fp;
strcpy (rndfil, RNDFIL);
while ((ch = getopt (argc, argv, "b:f:")) != -1) {
switch (ch) {
case 'b':
bits = atoi (optarg);
if ((bytes = chkbits (bits)) < 0)
usage ();
break;
case 'f':
strcpy (rndfil, optarg);
break;
default:
usage();
break;
}
}
if ((fp = fopen (rndfil, "r")) == NULL) {
fprintf (stdout, "No pude abrir %s\n", rndfil);
exit (1);
}
while (bytes) {
fread (mybuf, 1, 1, fp);
fprintf (stdout, "%02x", mybuf[0]);
bytes--;
}
fprintf (stdout, "\n");
fclose (fp);
}
usage () {
fprintf (stderr, "usage: %s ", getprogname());
fprintf (stderr, "[-b bits] ");
fprintf (stderr, "[-f /dev/randomdev] ");
fprintf (stderr, "\n");
exit (1);
}
chkbits (int bits) {
if (bits <= 0) return (-1);
if (bits & 7) return (-1);
return (bits >> 3);
}
