使用crypt加密单词列表

时间:2014-06-23 19:11:06

标签: c encryption

我正在研究这个问题:http://d2o9nyf4hwsci4.cloudfront.net/2014/spring/psets/2/hacker2/hacker2.html

我试图从/ usr / share / dict / words中列出加密的8个字母的单词,这是我到目前为止所得到的。我正在使用盐HA和50。

#define _XOPEN_SOURCE
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int FindWord();
int main(int argc, char *argv[])
{
    if(argc > 2)  
    {
        printf("Invalid Argument");
        return 1;
    } 
    else 
    {
      FindWord();  
    }
int FindWord()
{
    FILE *fp1, *fp2;
    fp1 = fopen("/usr/share/dict/words", "r");
    fp2 = fopen("EncrpytedPassword.txt","a+");
    char *Line = fgets(char *line[9], int 9, fp1);
    while (fgets(char *line[9], int 9, fp1) != EOF)
    {
         char *EncryptLine1 = crypt(Line, const char *50); 
         fputs(EncryptLine1, fp2);
         char *EncryptLine2 = crypt(Line, const char *"HA");
         fputs(EncryptLine2, fp2);
    }
} 





**crack.c:26:24: error: expected expression
char *Line = fgets(char *line[9], int 9, fp1);
                   ^
crack.c:27:18: error: expected expression
    while (fgets(char *line[9], int 9, fp1) != EOF)
             ^
crack.c:29:43: error: expected expression
         char *EncryptLine1 = crypt(Line, const char *50); 
                                      ^
crack.c:31:43: error: expected expression
         char *EncryptLine2 = crypt(Line, const char *"HA");
                       **

2 个答案:

答案 0 :(得分:0)

您的代码中存在一些问题:

false:

char *Line = fgets(char *line[9], int 9, fp1);

正确:

char line[9];
fgets(line, 9, fp1);

为什么:

  char *Line = fgets(char *line[9], int 9, fp1);
    while (fgets(char *line[9], int 9, fp1) != EOF)

不是吗? :

char line[9];
while (fgets(line, 9, fp1) != NULL)

另外,你的word文件长139719行。你确定要这么做吗?

错误:

char *EncryptLine1 = crypt(Line, const char *50);

是的:

char *EncryptLine1 = crypt(Line, "50"); 

使用-lcrypt更正此编译并且包含良好的包含且没有&#34;期望的表达式&#34;

(写&#34; \ n&#34;文件中的每个哈希值都很棒之后)

请注意,在函数开头声明EncryptLine1和EncryptLine2会更清楚。

答案 1 :(得分:0)

我完全不确定究竟是什么问题,但假设在给出的代码中存在一些问题,并且假设正在询问解决问题的航点:代码中缺少打开和关闭的类型转换括号。

line在您向我们披露的情况下不存在。您似乎尝试使用fgets的方式确实非常规,但以下方法可行:

char *Line = fgets((char[9]) { 0 }, (int) 9, fp1);

而不是你写的。在那里,{ 0 }将被转换为9个字符数组,动态分配内存直到该范围结束,然后将其作为参数发送到fgets。然后,Line将接收该动态分配的内存位置的地址,因为fgets返回其第一个参数,除非发生错误。

我希望我可以提供我依赖的文件,以确保在该范围结束之前该内存位置可用。

我不知道你在(const char *) 50尝试过什么,但它不会起作用。如果您希望将带有ASCII代码50的单个字符作为字符串传递,那么您可以在那里编写(const char[]) { 50, 0 }。或者更确切地说(const char *) "50"如果您想使用字符串"50"