Help Ejercicio 122 en C

Iniciado por ANELKAOS, 9 Septiembre 2005, 04:06 AM

0 Miembros y 1 Visitante están viendo este tema.

ANELKAOS

CitarAcceso a ficheros

Ejercicio 122
Escribir un programa que solicite palabras y las agrege a un fichero llamado c:\diccionario de forma que luego se puedan consultar las palabras una a  una

Vale, lo q yo he hecho es un programa que pide al usuario la longitud mínima y maxima de la contraseña y crea todas las palabras posibles. Ejemplo:
min=1, max=2 pues crea un archivo en el que guarda en cada linea todas las palabras posibles desde la cadena a hasta la zz de la forma:
Citara
b
c
...
ab
ac
ad
...
y así hasta zz

El código que no consigo hacer funcionar es este:


/*
* Ejercicio 122 by ANELKAOS
* Creación de diccionarios de contraseñas para fuerza bruta
*/

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

int max, min, i, j;
char cadena[100];
char abcd[38]= "abcdefghijklmnñopqrstuvwxyz0123456789";


int main()
{
     printf("\n\n\t******************************************************************\n");
     printf("\t*Diccionario de palabras V 0.1*\n");
     printf("\t******************************************************************\n");
     printf("\n\n\t Introduzca la longitud m%cnima de la contrase%ca: ",161,164);
     scanf("%d",&min);
     printf("\n\n\t Introduzca la longitud m%cxima (menor que 100) de la contrase%ca: ",160,164);
     scanf("%d",&max);

     printf("\n\n\t Generando archivo de contrase%cas en C:\\pass.txt...",164);

     FILE *pfich;
     
     pfich = fopen("pass.txt", "w");     
     
     if(pfich == NULL){
              printf("\nERROR al abrir el fichero.");
              exit(1);
              }
//escibimos en el archivo
    for(i=min;i<=max;i++)
       {
      for(j=0;j<37;j++)
         {
         cadena[i]=abcd[j];


         strcat(&cadena[i],&abcd[j]);
         fprintf(pfich, "%s\n", cadena);
         }
      }           

/*terminamos de usar el archivo*/
     if(fclose(pfich)!=0){
              printf("\nERROR al cerrar el archivo.");
              exit(1);
              }

     printf("\n\n\t Pulse cualquier tecla para SALIR");
     getchar();
}


Tengo algo oxidado el tema de cadenas y los archivos...pq le he pegado un repaso en Inet que si no lo mismo. Si alguien que lo tenga fresco me puede echar un cable para hacer funcionar esto se lo agradeceria mucho  :-*

1saludo

redHat

#1
A mi me corrió si declaro a la variable pfich como variable global, creo que después de un printf o scanf no puedes declarar variables, creo, no estoy seguro....
pero ese error yo lo tenía antes

/*
* Ejercicio 122 by ANELKAOS
* Creación de diccionarios de contraseñas para fuerza bruta
*/

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

int max, min, i, j;
char cadena[100];
char abcd[38]= "abcdefghijklmnñopqrstuvwxyz0123456789";
FILE *pfich;


int main()
{
     printf("\n\n\t******************************************************************\n");
     printf("\t*Diccionario de palabras V 0.1*\n");
     printf("\t******************************************************************\n");
     printf("\n\n\t Introduzca la longitud m%cnima de la contrase%ca: ",161,164);
     scanf("%d",&min);
     printf("\n\n\t Introduzca la longitud m%cxima (menor que 100) de la contrase%ca: ",160,164);
     scanf("%d",&max);

     printf("\n\n\t Generando archivo de contrase%cas en C:\\pass.txt...",164);
     
     pfich = fopen("pass.txt", "w");     
     
     if(pfich == NULL){
              printf("\nERROR al abrir el fichero.");
              exit(1);
              }
//escibimos en el archivo
    for(i=min;i<=max;i++)
       {
      for(j=0;j<37;j++)
         {
         cadena[i]=abcd[j];


         strcat(&cadena[i],&abcd[j]);
         fprintf(pfich, "%s\n", cadena);
         }
      }           

/*terminamos de usar el archivo*/
     if(fclose(pfich)!=0){
              printf("\nERROR al cerrar el archivo.");
              exit(1);
              }

     printf("\n\n\t Pulse cualquier tecla para SALIR");
     getchar();
}
Calaberas traseras transparentes $80.00, defensa de Honda Civic 2000, $1000.00, cambiarte 4 carriles con menos de 5 metros de espacio, no tiene precio.....

soplo

De todas formas parece que hay una confusión de conceptos. En un brute force se puede utilizar bien un dicionario bien permutaciones. lo que no tiene sentido es ambas cosas.

Quieo decir que en un dicionario no se meten permutaciones. se meten palabras posibles y lo que hace el bruteforce es probarlas a ver si funcionan. Suelen ser palabras comunes que se usan en claves. Se prueba la palabra en sí misma y posibles variaciones (mayúsculas, minúsculas, parte de la plabra). P.ej. Administrador, administrador, admin, Admin, ..., etc.

Si ninguna palabra es válida entonces se emplea el método de las permutaciones que es ponerse a realizar combinaciones e ir probando una a una hasta dar con la clave. Esas combinaciones se realizan en memoria y se prueban. Si cada combinación fuera leída de un fichero el proceso sería larguísimo.

lUn saludo
Callar es asentir ¡No te dejes llevar!

ANELKAOS

Buenas soplo supongo q t refieres a la respuesta q dí al del SSH. Simplemente es q coincidió q habia hexo esto recientemente y podia utilizarlo x medio de pipes y NO DE ARCHIVOS como le recomendé en el otro post.

1saludo y gracias redHat que tenias razon y no te dí ni las gracias jeje  :)

Arcangel_RZ

Citarcreo que después de un printf o scanf
eso no es cierto....
cuando trabajas en C, tienes que definir las variables globales y las locales antes de cualquier codigo ok.
sin embargo, en C++ las coasas cambien puedes definirlas en cualquier parte del programa con relación a ambitos (generalmente asociado con los espacios entre corchetes)