Erreur de programme de cryptage très simple

Je crée un programme qui prend un fichier en entrée et génère le mot de passe déchiffré de chaque ligne. Le fichier contient trois lignes de mots de passe cryptés. Je suis assuré que les mots de passe sont déchiffrés en mots de 4 lettres. Étant donné que j’ai créé un caractère [] des lettres. Je ne parviens pas à lire le fichier ligne par ligne avec LOW LEVEL IO et à placer le mot de passe résultant dans un nouveau fichier. Tous les conseils sont appréciés!

Voici mon code jusqu’à présent:

#include  #include  #include  #include  #include  #include  #include  #define BUFFER_SIZE 1024 int main(void) { int f = open("pass.txt", O_RDONLY); if (f < 0) return 0; char buf[1024]; while (my_fgets(buf, sizeof(buf), f)) printf("%s\n", buf); close(f); const char *const pass = "$1$6gMKIopE$I.zkP2EvrXHDmApzYoV.B."; char *result; int ok; char guess[] = {'a','a','a','a','\0'}; char ch1=guess[0], ch2=guess[1], ch3=guess[2], ch4=guess[3]; do{ for(ch1; ch1<='z';++ch1) { for(ch2='a';ch2<='z';++ch2) { for(ch3='a';ch3<='z';++ch3) { for(ch4='a';ch4<='z';++ch4) { result = crypt(guess, pass); } } } } }while(strcmp(result, pass) != 0); puts(guess); return 0; } int my_fgets(char* buf, int len, int f) { for (int i = 0; i < len; i++,buf++) { int count = read(f, buf, 1); if (!count || (buf[0] == '\n')) { buf[0] = 0; return i; } } return 0; } 

Fichier texte:

 $1$6gMKIopE$I.zkP2EvrXHDmApzYoV.B. $1$pkMKIcvE$WQfqzTNmcQr7fqsNq7K2p0 $1$0lMKIuvE$7mOnlu6RZ/cUFRBidK7PK. 

    Le bloc de code suivant semble être défectueux:

     while (my_fgets(buf, sizeof(buf), f)) printf("%s\n", buf); 

    Cela ne conserve que la dernière ligne. Les autres lignes sont lues et rejetées.

    En outre, il n’est pas clair comment ch1 est censé être initialisé à chaque itération de la boucle do ... while while. Vous l’avez comme:

     for(ch1; ch1<='z';++ch1) // ^^^ 

    Cela ch1 pas ch1 . C'est une expression sans effets secondaires.

    Je suggère de mettre la majeure partie de la logique de déchiffrement du mot de passe dans une fonction qui lui est propre et d’appeler la fonction après avoir lu chaque ligne.

     void decryptPassword(char* buf) { printf("%s\n", buf); const char *const pass = "$1$6gMKIopE$I.zkP2EvrXHDmApzYoV.B."; char *result; int ok; char guess[] = {'a','a','a','a','\0'}; char ch1=guess[0], ch2=guess[1], ch3=guess[2], ch4=guess[3]; do{ for(ch1; ch1<='z';++ch1) { for(ch2='a';ch2<='z';++ch2) { for(ch3='a';ch3<='z';++ch3) { for(ch4='a';ch4<='z';++ch4) { result = crypt(guess, pass); } } } } }while(strcmp(result, pass) != 0); puts(guess); } int main(void) { int f = open("soc.in", O_RDONLY); if (f < 0) return 0; char buf[1024]; while (my_fgets(buf, sizeof(buf), f)) decryptPassword(buf); close(f); return 0; }