我已经使用c中的crypt函数来加密给定的字符串。 我已经写下面的代码,crypt函数和链接错误“未定义的引用'crypt'”
#include<stdio.h>
#include<unistd.h>
int main()
{
printf("%s\n",crypt("passwd",1000));
}
但上面的代码抛出错误,“未定义参考`隐窝'”。 上面的代码有什么问题。
在此先感谢。
我已经使用c中的crypt函数来加密给定的字符串。 我已经写下面的代码,crypt函数和链接错误“未定义的引用'crypt'”
#include<stdio.h>
#include<unistd.h>
int main()
{
printf("%s\n",crypt("passwd",1000));
}
但上面的代码抛出错误,“未定义参考`隐窝'”。 上面的代码有什么问题。
在此先感谢。
您的实际问题,如果你想使用crypt()
功能,你需要链接到crypt库。将-lcrypt
添加到您的编译命令。您可能还需要定义_XOPEN_SOURCE
或_GNU_SOURCE
。
$ man 3 crypt
CRYPT(3) Linux Programmer's Manual CRYPT(3)
NAME
crypt, crypt_r - password and data encryption
SYNOPSIS
#define _XOPEN_SOURCE /* See feature_test_macros(7) */
#include <unistd.h>
char *crypt(const char *key, const char *salt);
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <crypt.h>
char *crypt_r(const char *key, const char *salt,
struct crypt_data *data);
Link with -lcrypt.
...
非常感谢。 它工作正常。 – kiruthika 2010-04-03 04:34:26
如果您想使用crypt()
,则需要包含crypt.h。下面的两个其他包括,加:
#include <crypt.h>
我已经将这行添加到我的代码中。之后它也会抛出相同的错误。 – kiruthika 2010-04-02 07:07:00
的crypt
功能是非标准的,但提供由Linux上的GNU C库的扩展。它在<crypt.h>
定义你需要把下面这行你之前包含:
#define _XOPEN_SOURCE
crypt()
使用DES是极不安全和可能年纪比年纪比你大,你 12年。
我建议你使用严格的加密算法,如AES。许多图书馆提供这种加密;例如OpenSSL (crypto.lib)是个不错的选择。
不回答,因为很多人已经做了
“几乎所有Linux发行版都使用的GNU C库提供了一个crypt函数的实现,该函数支持基于DES,MD5和SHA的哈希算法”(至少根据维基百科) – Joey 2010-04-02 07:38:35
你#include
的头文件之前,你必须#define __XOPEN_SOURCE
。
'crypt'没有散列而是加密吗? – Joey 2010-04-02 07:02:43
@Joha:不,否则会被称为'哈希'不是吗? – 2010-04-02 07:13:29