2010-04-02 86 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

相關問題