Amigo, tenes muchas formas de hacerlo, te doy un ejemplo, espero ser claro ....
Vamos al siguiente code : (abajo explico)
Código: Seleccionar todo
void cadenaOfuscar(unsigned char micadena[], char opcion)
{
unsigned char key[] = "ghjR%$GDFG%GDG657ythgF#GFH";
int longkey = 26;
int i =0, j=0;
do
{
if (opcion == 'o')
micadena[i] = micadena[i] + key[j];
else
micadena[i] = micadena[i] - key[j];
i++; j++;
if (j==longkey)
j=0;
} while (micadena[i] !='\0');
}
Eso es una funcion que recibe como parametros una cadena de caracteres y un caracter adicional que indica si tengo que "ofuscar" o "deofuscar"
si recibo la 'o' ofusca la cadena recibida sumando a cada caracter un valor arbitrario que corresponde a una key que inventé para el caso... para que se entienda mejor , te muestro un ejemplo de como utilizar esta funcion:
Código: Seleccionar todo
int main ()
{
unsigned char cadena[] = "hola mundo";
cadenaOfuscar(cadena, 'o');
printf ("\n cadena ofuscada: %s \n", cadena);
cadenaOfuscar(cadena, 'd');
printf ("\n cadena deofuscada: %s \n", cadena);
}
Ahi puedo ver los resultados de la funcion "CadenaOfuscar" con el "hola mundo"
Ahora bien, hasta ahi todo muy lindo, pero en hex vas a seguir viendo el "hola mundo" ya que hago la ofuscacion y deofuscacion dentro del mismo code
Entonces, deberia guardar en un archivo o "copiar a mano" la cadena ofuscada para evitar poner explicitamente el "hola mundo". Para este ejemplo lo voy a hacer a mano, para lo cual voy a agregar unas lineas al main para ver el codigo en hex y en decimal de cada caracter ofuscado:
Código: Seleccionar todo
int main ()
{
unsigned char cadena[] = "hola mundo";
cadenaOfuscar(cadena, 'o');
printf ("\n cadena ofuscada: %s \n", cadena);
for (int i =0; cadena[i]!='\0'; i++)
{
printf ("\n byte: %d",i);
printf ("... en hexa = %x", cadena[i]);
printf ("... en decimal = %d", cadena [i]);
}
cadenaOfuscar(cadena, 'd');
printf ("\n\n cadena deofuscada: %s \n\n", cadena);
}
ya tengo por pantalla los valores :
Ahora debo reemplazar mi cadena en el main con los datos que tengo por consola, en este caso voy a poner los valores decimales ...
Código: Seleccionar todo
int main()
{
unsigned char cadenaOfuscada[] = {207,215,214,179,69,145,188,178,170,182,'\0'};
cadenaOfuscar(cadenaOfuscada, 'd');
printf ("\n\n cadena deofuscada: %s \n\n", cadenaOfuscada);
}
y en hex ... ya no está visible el "hola mundo"
Espero haber sido claro ... (la proxima vez hago un tuto mejor explicado)
Salud