我在 C 中使用 crypt 函数,我在其中给命令行输入一个加密的单词。我使用 /usr/share/dict/words 中的单词并使用 crypt 函数对其进行加密,然后将 crypt 函数的加密输出与命令行输入进行比较。如果单词相同,则我使用 printf 语句将未加密的代码作为输出给出。代码如下。
#include<stdio.h>
#define _XOPEN_SOURCE
#include<unistd.h>
#include<cs50.h>
#include<string.h>
int
main(int argc, string argv[]){
char line[80];
string crypto;
if(argc>2||argc<2)
{
printf("ERROR. Enter only one crypt");
return 1;
}
string crypti=argv[1];
FILE *fr;
string as;
fr=fopen("/usr/share/dict/words","r");
if(!fr)
{
printf("File can't be read");
exit(-1);
}
while(fgets(line,80,fr)!=NULL)
{
as=crypt(line,"50");
if(strcmp(as,crypti)==0)
{
printf("%s",line);
break;
}
}
fclose(fr);
}
该代码似乎仅适用于 1 个输入,即当我给出“./a.out 50q.zrL5e0Sak”(不带引号)时。但是,如果我对 crypt 使用任何其他输入,则代码似乎会失败。另一个密码:加密密码的例子是 abaca:50TZxhJSbeG1I。abaca 一词出现在列表中,但无法识别。我无法修复此代码以适用于所有输入。