非常简单的加密程序错误

我正在创建一个程序,它将文件作为输入并输出每行的解密密码。 该文件包含三行加密密码。 我保证密码解密为4个字母的单词。 鉴于我已经创建了字母的char []。 我在使用LOW LEVEL IO逐行读取文件并将生成的密码放入新文件时遇到问题。 任何和所有的建议表示赞赏!

这是我到目前为止的代码:

#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; } 

文本文件:

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

以下代码块似乎有缺陷:

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

这样做只保留最后一行。 读取并丢弃其他行。

此外,还不清楚如何在do ... while循环的每次迭代中初始化ch1 。 你有它:

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

这不会初始化ch1 。 这是一种没有副作用的表达。

我建议将大部分密码解密逻辑放在自己的函数中,并在读完每一行后调用函数。

 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; }