【发布时间】: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 语言,或者如果它被支持,它是一个晦涩的、记录不充分的和/或隐藏的特性。