我正在编写一个程序,它获取一个包含 3 行加密密码的文件,并将它们与来自 aaaa - zzzz 的所有 4 个小写字母进行比较。我遇到的唯一问题是我无法弄清楚如何逐行输入我输入的文件以及如何将其与 4 个字母的单词单独进行比较。然后它应该打印与文件中的密码相关的 3 个解密的 4 个字母单词。另外,如果有任何关于如何改进我的代码的类型,请告诉我。我是这方面的初学者,所以如果可能的话,我需要清楚的解释和例子。谢谢你。
编辑*****
主要问题在于所有功能和主要。我不想将 aaaa、aaab、aaac 等打印到屏幕上,但我想把它放在一个 char 数组中,这样我就可以使用 crypt 将每个单独的行与文件中的每一行进行比较。所以我需要关于如何将所有 456976 个组合放入一个数组、将其与每一行代码进行比较以及将解决方案打印到屏幕上的建议。
文件如下所示:
$1$6gMKIopE$I.zkP2EvrXHDmApzYoV.B.
$1$pkMKIcvE$WQfqzTNmcQr7fqsNq7K2p0
$1$0lMKIuvE$7mOnlu6RZ/cUFRBidK7PK.
我的代码如下所示:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define BUFFER_SIZE 1024
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;
}
int inc(char *c,char begin, char end){
if(c[0]==0)
return 0;
if(c[0] == end){ // This make the algorithm to stop at char 'f'
c[0]=begin; // but you can put any other char
return inc(c+sizeof(char), begin, end);
}
c[0]++;
return 1;
}
char all(int a, int n,char begin, char end){
int i, j;
char *c = malloc((n+1)*sizeof(char));
char result[] = "";
for(i = a; i <= n; i++)
{
for(j=0;j<i;j++) c[j]=begin;
c[i]=0;
do {
int k = sizeof(result);
for (int g = 0; g < k -1; g++)
{
result[g] = c;
}
} while(inc(c,begin,end));
}
free(c);
}
int main(int argc, char* argv[])
{
char *result;
char let[456976];
int f = open("pass.txt", O_RDONLY);
if (f < 0)
return 0;
char buf[1024];
while (my_fgets(buf, sizeof(buf), f))
{
let = all(4,4,'a','z');
int i = 0;
result = crypt((let[i+1]), buf);
int ok = strcmp (result, pass) == 0;
return ok ? 0 : 1;
all(4, 4, 'a', 'z');
}
close(f);
}