#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include "probar-claves.h"
//int probar_combinaciones_palabra(linea, clave_descifrada,clave);
int main (int argc, char*argv[])
//argv[1] Nombre del fichero con el diccionario
//argv[2] Desplazamiento del octeto en el que se empieza a leer
//argv[3] Desplazamiento del octeto en el que se termina de leer
//argv[4] Clave a leer
//argv[5] Fichero en el que escribir el resultado descifrado (SOLO SI LO HAY)
{
//Variables
FILE *diccionario;
FILE *descifrado;
int inicio;
int final;
int contador;
char linea[255];
char clave[255];
char clave_descifrada[255];
int tam_clave;
int tam_linea;
int resultado;
int devolucion;
//Apertura de los ficheros y lectura del inicio y del final
diccionario
= fopen (argv
[1], "r"); descifrado
= fopen (argv
[5], "w+");
//Comprobamos que el fichero se pueda leer
if(diccionario==NULL)
{
printf("Hay un error a la hora de leer en el fichero"); }
else
{
//Nos situamos en el primer byte que debemos leer
contador = inicio;
fseek(diccionario
, inicio
, SEEK_SET
); //Copiamos el resumen md5
if(clave[tam_clave-1] == '\n')
{
clave[tam_clave-1]='\0';
}
//Leemos sólo los octetos necesarios
while (contador <= final)
{
fgets(linea
, 255, diccionario
); if(linea[tam_linea-2] == '\r')
{
linea[tam_linea-2] = '\0';
}
else if (linea[tam_linea-1]=='\n')
{
linea[tam_linea-1]='\0';
}
//devolucion=probar_combinaciones_palabra(linea, clave_descifrada,clave);
if(devolucion==0)
{
//Se ha descubierto la clave en el diccionario
resultado
=fprintf(descifrado
, clave_descifrada
); //Escribrimos el resultado de descifrar en el fichero destino if(resultado==0)
{
printf("Ha habido un problema al escribir el resultado en el fichero\n"); }
else
{
contador=final+1;
printf("Se ha encontrado la clave\n"); }
}
else
{
//No se ha descubierto la clave, hay que seguir leyendo el diccionario
contador++;
}
}
//Se ha leído todo el diccionario y no se ha encontrado la clave
if(contador==final)
{
printf("No se ha encontrado la clave\n"); }
}
}
IAojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiAKLy8jaW5jbHVkZSAicHJvYmFyLWNsYXZlcy5oIgoKLy9pbnQgcHJvYmFyX2NvbWJpbmFjaW9uZXNfcGFsYWJyYShsaW5lYSwgY2xhdmVfZGVzY2lmcmFkYSxjbGF2ZSk7IAppbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIqYXJndltdKQoKCS8vYXJndlsxXSBOb21icmUgZGVsIGZpY2hlcm8gY29uIGVsIGRpY2Npb25hcmlvCiAgICAvL2FyZ3ZbMl0gRGVzcGxhemFtaWVudG8gZGVsIG9jdGV0byBlbiBlbCBxdWUgc2UgZW1waWV6YSBhIGxlZXIKICAgIC8vYXJndlszXSBEZXNwbGF6YW1pZW50byBkZWwgb2N0ZXRvIGVuIGVsIHF1ZSBzZSB0ZXJtaW5hIGRlIGxlZXIKCS8vYXJndls0XSBDbGF2ZSBhIGxlZXIKCS8vYXJndls1XSBGaWNoZXJvIGVuIGVsIHF1ZSBlc2NyaWJpciBlbCByZXN1bHRhZG8gZGVzY2lmcmFkbyAoU09MTyBTSSBMTyBIQVkpCnsKICAgIC8vVmFyaWFibGVzCiAgICBGSUxFICpkaWNjaW9uYXJpbzsgIAogICAgRklMRSAqZGVzY2lmcmFkbzsKCWludCBpbmljaW87CglpbnQgZmluYWw7CglpbnQgY29udGFkb3I7CgljaGFyIGxpbmVhWzI1NV07CgljaGFyIGNsYXZlWzI1NV07CgljaGFyIGNsYXZlX2Rlc2NpZnJhZGFbMjU1XTsKCWludCB0YW1fY2xhdmU7CglpbnQgdGFtX2xpbmVhOwoJaW50IHJlc3VsdGFkbzsKCWludCBkZXZvbHVjaW9uOwoJCgkKCS8vQXBlcnR1cmEgZGUgbG9zIGZpY2hlcm9zIHkgbGVjdHVyYSBkZWwgaW5pY2lvIHkgZGVsIGZpbmFsCiAgICBkaWNjaW9uYXJpbyA9IGZvcGVuIChhcmd2WzFdLCAiciIpOyAKCWluaWNpbyA9IGF0b2koYXJndlsyXSk7CglmaW5hbCA9IGF0b2koYXJndlszXSk7CglzdHJjcHkoY2xhdmUsIGFyZ3ZbNF0pOwoJZGVzY2lmcmFkbyA9IGZvcGVuIChhcmd2WzVdLCAidysiKTsgIAogIAoJCgkvL0NvbXByb2JhbW9zIHF1ZSBlbCBmaWNoZXJvIHNlIHB1ZWRhIGxlZXIKCWlmKGRpY2Npb25hcmlvPT1OVUxMKQoJewoJCXByaW50ZigiSGF5IHVuIGVycm9yIGEgbGEgaG9yYSBkZSBsZWVyIGVuIGVsIGZpY2hlcm8iKTsKCX0KCWVsc2UKCXsKCQkKCQkvL05vcyBzaXR1YW1vcyBlbiBlbCBwcmltZXIgYnl0ZSBxdWUgZGViZW1vcyBsZWVyCgkJY29udGFkb3IgPSBpbmljaW87CgkJZnNlZWsoZGljY2lvbmFyaW8sIGluaWNpbywgU0VFS19TRVQpOwkJCgkJLy9Db3BpYW1vcyBlbCByZXN1bWVuIG1kNQoJCQoJCXRhbV9jbGF2ZSA9IHN0cmxlbihjbGF2ZSk7CgkJaWYoY2xhdmVbdGFtX2NsYXZlLTFdID09ICdcbicpCgkJewoJCQljbGF2ZVt0YW1fY2xhdmUtMV09J1wwJzsJCgkJfQoJCQoJCQoJCS8vTGVlbW9zIHPDs2xvIGxvcyBvY3RldG9zIG5lY2VzYXJpb3MKCQl3aGlsZSAoY29udGFkb3IgPD0gZmluYWwpCgkJewoJCQlmZ2V0cyhsaW5lYSwgMjU1LCBkaWNjaW9uYXJpbyk7CgkJCXRhbV9saW5lYSA9IHN0cmxlbihsaW5lYSk7CgkJCWlmKGxpbmVhW3RhbV9saW5lYS0yXSA9PSAnXHInKQoJCQl7CgkJCQlsaW5lYVt0YW1fbGluZWEtMl0gPSAnXDAnOwoJCQl9CgkJCQoJCQllbHNlIGlmIChsaW5lYVt0YW1fbGluZWEtMV09PSdcbicpCgkJCXsKCQkJCQlsaW5lYVt0YW1fbGluZWEtMV09J1wwJzsKCQkJfQoJCQkvL2Rldm9sdWNpb249cHJvYmFyX2NvbWJpbmFjaW9uZXNfcGFsYWJyYShsaW5lYSwgY2xhdmVfZGVzY2lmcmFkYSxjbGF2ZSk7CgkJCWlmKGRldm9sdWNpb249PTApCgkJCXsKCQkJCS8vU2UgaGEgZGVzY3ViaWVydG8gbGEgY2xhdmUgZW4gZWwgZGljY2lvbmFyaW8KCQkJCXJlc3VsdGFkbz1mcHJpbnRmKGRlc2NpZnJhZG8sIGNsYXZlX2Rlc2NpZnJhZGEpOyAvL0VzY3JpYnJpbW9zIGVsIHJlc3VsdGFkbyBkZSBkZXNjaWZyYXIgZW4gZWwgZmljaGVybyBkZXN0aW5vCgkJCQlpZihyZXN1bHRhZG89PTApCgkJCQl7CgkJCQkJcHJpbnRmKCJIYSBoYWJpZG8gdW4gcHJvYmxlbWEgYWwgZXNjcmliaXIgZWwgcmVzdWx0YWRvIGVuIGVsIGZpY2hlcm9cbiIpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWNvbnRhZG9yPWZpbmFsKzE7CgkJCQkJcHJpbnRmKCJTZSBoYSBlbmNvbnRyYWRvIGxhIGNsYXZlXG4iKTsKCQkJCX0JCgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkvL05vIHNlIGhhIGRlc2N1YmllcnRvIGxhIGNsYXZlLCBoYXkgcXVlIHNlZ3VpciBsZXllbmRvIGVsIGRpY2Npb25hcmlvCgkJCQljb250YWRvcisrOwoJCQl9CgkJCQoJCQkKCQl9CgkJLy9TZSBoYSBsZcOtZG8gdG9kbyBlbCBkaWNjaW9uYXJpbyB5IG5vIHNlIGhhIGVuY29udHJhZG8gbGEgY2xhdmUKCQlpZihjb250YWRvcj09ZmluYWwpCgkJeyAKCQkJcHJpbnRmKCJObyBzZSBoYSBlbmNvbnRyYWRvIGxhIGNsYXZlXG4iKTsJCQkKCQl9CQkKCQlmY2xvc2UoZGljY2lvbmFyaW8pOwoJCWZjbG9zZShkZXNjaWZyYWRvKTsKCX0KCQkKCQkKCQkKCQkKIAp9CQ==