Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: The Swash en 3 Octubre 2011, 04:13 am



Título: [C] Variación cifrado ROT.
Publicado por: The Swash en 3 Octubre 2011, 04:13 am
Buenas noches,
Creo que a Zero le había comentado de mi idea de darle una pequeña variación al cifrado ROT común.

Idea:
  • Utilizar una contraseña numérica con la cual se hará la rotación.
  • Se operará en bloques igual a la longitud de números de la contraseña.
  • Individualmente actuará cada número a la hora de cifrar.
  • Si el dígito actual es menor que 5 se suma, de lo contrario se resta.
  • El tercer parámetro es para evitar prácticamente replicar la función para descifrar.

Les dejo un pequeño ejemplo, lo pueden adaptar y optimizar. Si quieren adaptarlo a binarios deberán añadir comprobación del límite ASCII y no usar strlen.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. char * ROTPassword(char * String, int password,int descifrar);
  6.  
  7.  
  8. int main()
  9. {
  10.    printf("%s ", ROTPassword("hsec",152,0));
  11.    printf("%s ", ROTPassword("jnfe",152,1));
  12.    getchar();
  13.    return 0;
  14. }
  15.  
  16. char * ROTPassword(char * String, int password, int descifrar)
  17. {
  18.    int array[10] = {0};
  19.    int passcopy = password, counter = 0,i,strlength, passlength = 0;
  20.    char * cifrado;
  21.  
  22.    strlength = strlen(String);
  23.    while(passcopy >= 1)
  24.    {
  25.        array[counter] = (passcopy % 10);
  26.        passcopy /= 10;
  27.        counter++;
  28.    }
  29.  
  30.    cifrado = (char*) malloc(strlength+1);
  31.    memset(cifrado,0,strlength+1);
  32.  
  33.    for (i = 0; i < strlength; i++)
  34.    {
  35.        if (array[passlength] < 5)
  36.        {
  37.            (descifrar == 1)?cifrado[i] = String[i] - array[passlength]: (cifrado[i] = String[i] + array[passlength]);
  38.        }
  39.        else
  40.        {
  41.            (descifrar == 1)?cifrado[i] = String[i] + array[passlength]: (cifrado[i] = String[i] - array[passlength]);
  42.        }
  43.        passlength++;
  44.        if (passlength >= counter) passlength = 0;
  45.  
  46.    }
  47.  
  48.    return cifrado;
  49. }

Un saludo, Gracias Zero.