2010-04-02 85 views
4

我已经使用c中的crypt函数来加密给定的字符串。 我已经写下面的代码,crypt函数和链接错误“未定义的引用'crypt'”

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

int main() 
{ 
    printf("%s\n",crypt("passwd",1000)); 
} 

但上面的代码抛出错误,“未定义参考`隐窝'”。 上面的代码有什么问题。

在此先感谢。

+0

'crypt'没有散列而是加密吗? – Joey 2010-04-02 07:02:43

+0

@Joha:不,否则会被称为'哈希'不是吗? – 2010-04-02 07:13:29

回答

8

您的实际问题,如果你想使用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. 

    ... 
+0

非常感谢。 它工作正常。 – kiruthika 2010-04-03 04:34:26

1

如果您想使用crypt(),则需要包含crypt.h。下面的两个其他包括,加:

#include <crypt.h> 
+0

我已经将这行添加到我的代码中。之后它也会抛出相同的错误。 – kiruthika 2010-04-02 07:07:00

0

crypt功能是非标准的,但提供由Linux上的GNU C库的扩展。它在<crypt.h>

1

定义你需要把下面这行你之前包含:

#define _XOPEN_SOURCE 
7

crypt()使用DES是极不安全可能年纪比年纪比你大,你 12年。

我建议你使用严格的加密算法,如AES。许多图书馆提供这种加密;例如OpenSSL (crypto.lib)是个不错的选择。

不回答,因为很多人已经做了

+2

“几乎所有Linux发行版都使用的GNU C库提供了一个crypt函数的实现,该函数支持基于DES,MD5和SHA的哈希算法”(至少根据维基百科) – Joey 2010-04-02 07:38:35

1

#include的头文件之前,你必须#define __XOPEN_SOURCE

相关问题