【问题标题】:Crypt function in simple C program not working简单 C 程序中的 Crypt 函数不起作用
【发布时间】:2019-03-20 16:29:49
【问题描述】:

我是一个菜鸟,试图弄清楚如何将一个单词和一个盐传递给 DES crypt 函数,并打印出一个加密(好吧,加密不佳)的密码。我已经阅读了手册页和这里的一些帖子(关于 cyppt 和我正在解决的破解问题集),但我仍然不确定我的语法需要按照下面的代码是什么,它有一个 '对地穴的未定义引用。

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <crypt.h>

#define _XOPEN_SOURCE

char *crypt(const char *key, const char *salt);

int main(void) {

    char *password = "lol";

    char *salt = "50";

    char *encrypted = crypt(password, salt);

    printf("%s\n", encrypted);
    return 0;
}

// should print 50cI2vYkF0YU2 per CS50 crack exercise example.

在问这个问题之前,我已经查阅了以下内容,但仍然不明白如何让我的简单示例正常工作。 http://pubs.opengroup.org/onlinepubs/009695299/functions/crypt.html https://www.quora.com/How-does-the-crypt-function-work-with-some-examples-of-crypt-function-in-C https://cs50.stackexchange.com/questions/23583/cs-des-based-crypt-function crypt() function in C not working

【问题讨论】:

  • 未定义的引用错误通常是链接器错误,而不是编译器错误。您可能只需要告诉链接器(例如,使用 -lcrypt)您要链接到 crypt 库。
  • 为什么要复制crypt 的库声明?删除该行。包含头文件的全部意义在于您选择了这些声明。
  • 我将您的代码复制到了一个名为testcrypt.c 的文件中,并且它使用gcc -o testcrypt testcrypt.c -lcrypt 编译得很好。为了将来参考,当使用已安装库中的函数调用时,您通常可以通过查看手册页来确定要链接的库。在这种情况下,man 3 crypt 将向您显示 crypt 函数的手册页,并声明“使用 -lcrypt 链接”。
  • 我查看了 repl.it,但似乎找不到任何关于如何与外部库链接的讨论。有可能它只是不支持 C 语言,或者如果它被支持,它是一个晦涩的、记录不充分的和/或隐藏的特性。

标签: c cs50 des crypt


【解决方案1】:

编译时使用:gcc yourfilename.c -lcrypt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多