Algoritmo Cifrado Des

Tema en 'Foro Libre' iniciado por KurtCobain, 9 Abr 2007.

  1. Kur

    KurtCobain
    Expand Collapse
    Cabo

    Mensajes:
    104
    Me Gusta recibidos:
    0
    NOTA: Yo no me hago responsable de los dolores de cabeza que pueda producir
    la lectura de este articulo xD.

    INTRODUCCION
    ------------

    Pues en este articulo intentare explicar el funcionamiento del DES, que es un algoritmo
    de cifrado de datos simetrico (no es nada del otro mundo :).

    Primero voy a explicar algo sobre criptografia. El proposito de la
    criptografia es cifrar un texto conocido (llamado texto en plano) con una
    clave que solo conocen el que envia el mensaje y el que lo recibe (si el que
    lo recibe no conoce la clave no vamos bien xD), de forma que el texto
    resultante (llamado texto cifrado) solo pueda ser convertido al texto plano
    usando la clave de antes. De forma matematica seria algo asi:

    E : TEXTO CIFRADO
    M : MENSAJE EN TEXTO PLANO
    C : ALGORITMO DE CIFRADO
    D : ALGORITMO DE DESCIFRADO (Puede ser igual a C)
    K : CLAVE DE CIFRADO

    PARA CIFRAR:

    E = C( M, K )

    PARA DESCIFRAR:

    M = D( E, K );

    Pues este esquema es el que siguen absolutamente TODOS los sistemas de
    criptografia _simetrica_. Se llama simetrica porque la clave que se usa para
    cifrar es la misma que se usa para descifrar (voy a usar las palabras cifrar y
    descifrar en vez de encriptar y desencriptar, porque en espa¤ol, encriptar
    significa "meter en una cripta" xD).


    PROGRAMANDO UN EJEMPLO
    ----------------------

    Pues ahora que conocemos los principios basicos de la criptografia
    simetrica, vamos a hacer un programilla de cifrado sencillito.

    Lo primero es elegir el algoritmo a usar. Hemos dicho sencillito, asi que
    lo que hara el programa sera leer un archivo (el archivo que queremos cifrar,
    evidentemente) e ira sumando al codigo ASCII de cada caracter un valor. Luego
    escribira el resultado en otro archivo, que sera el archivo que contiene el
    texto cifrado. El valor que se le suma a cada caracter va a ser la clave.

    Nuestro algoritmo quedaria asi:
    C = ( M + K )
    D = ( E - K )

    Sencillo, ¨no?. El texto cifrado se obtiene sumando la clave al texto plano, y
    el texto plano se obtiene al reves. Hemos dicho que va a operar sobre el
    codigo ascii de los caracteres, lo quiere decir que cifrara en bloques de 8
    bits. Ok, vamos a hacer el programa.

    CODE :
    Code:
    <++> programas/cifrador1.c

    #include <stdio.h>
    #include <stdlib.h>

    #define CARACTER unsigned char

    /*
    * Esta es la funcion que cifra
    */
    CARACTER Cifra(CARACTER M, int K)
    {
    CARACTER ret;
    ret = M + K;
    return ret;
    }

    /*
    * Y esta la que descifra :)
    */
    CARACTER Descifra(CARACTER E, int K)
    {
    CARACTER ret;
    ret = E - K;
    return ret;
    }

    void uso(char *ar)
    {
    printf("Uso:\n");
    printf("\t%s <fichero_entrada> <fichero_salida> <clave> <0|1>\n", ar);
    printf("\t0 : cifra\n");
    printf("\t1 : descifra\n");
    exit(0);
    }

    int main(int argc, char **argv)
    {
    FILE *fin, *fout;
    int K, cifrar;
    CARACTER buf;

    if (argc < 5) uso(argv[0]);

    fin = fopen(argv[1], "r");
    if (!fin) {
    printf(" Error abriendo el fichero de entrada\n");
    exit(0);
    }

    fout = fopen(argv[2], "w");

    printf(" Error creando el fichero de salida\n");
    exit(0);
    }

    K = atoi(argv[3]);
    printf(" Usando clave %i\n", K);

    cifrar = atoi(argv[4]);

    if (!cifrar) printf("Cifrando...");
    else printf("Descifrando...");
    fflush(stdout);

    while (fread(&buf, 1, 1, fin) == 1) {
    switch(cifrar) {
    case 0:
    buf = Cifra(buf, K);
    break;
    case 1:
    buf = Descifra(buf, K);
    break;
    }
    fwrite(&buf, 1, 1, fout);
    }
    fflush(NULL);
    printf("hecho!\n");

    fclose(fin);
    fclose(fout);
    return 0;
    }
    <-->

    Vamos a probarlo.

    # gcc -o cifrador1 cifrador1.c

    # echo "Hola, soy Doing, Feliz Navidad" > texto_plano1

    # ./cifrador1 texto_plano1 texto_cifrado 666 0

    # cat texto_cifrado
    â ºÞº ƺàÿºèûþûþ¤

    # ./cifrado1 texto_cifrado texto_plano2 666 1

    # cat texto_plano2
     
  2. C o c k y

    C o c k y
    Expand Collapse
    Subteniente

    Mensajes:
    442
    Me Gusta recibidos:
    0
    buen aporte

    buen aporte man , esto me servira de mucho Graxs!!
    Bye Salu2:adios:
     

Compartir esta página