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.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * ROTPassword(char * String, int password,int descifrar);
int main()
{
printf("%s ", ROTPassword("hsec",152,0));
printf("%s ", ROTPassword("jnfe",152,1));
getchar();
return 0;
}
char * ROTPassword(char * String, int password, int descifrar)
{
int array[10] = {0};
int passcopy = password, counter = 0,i,strlength, passlength = 0;
char * cifrado;
strlength = strlen(String);
while(passcopy >= 1)
{
array[counter] = (passcopy % 10);
passcopy /= 10;
counter++;
}
cifrado = (char*) malloc(strlength+1);
memset(cifrado,0,strlength+1);
for (i = 0; i < strlength; i++)
{
if (array[passlength] < 5)
{
(descifrar == 1)?cifrado[i] = String[i] - array[passlength]: (cifrado[i] = String[i] + array[passlength]);
}
else
{
(descifrar == 1)?cifrado[i] = String[i] + array[passlength]: (cifrado[i] = String[i] - array[passlength]);
}
passlength++;
if (passlength >= counter) passlength = 0;
}
return cifrado;
}
Un saludo, Gracias
Zero.