我已經使用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