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);
}
Personal tools