Linux程式設計入門 crypt

2021-04-03 02:19:21 字數 2439 閱讀 4443

linux程式設計入門 - crypt

發布於2005-05-28 被讀2612次 【字型:大

中小】

crypt是個密碼加密函式,它是基於data encryption standard(des)演演算法。

crypt基本上是one way encryption,因此它只適用於密碼的使用,不適合於資料加密。

char *crypt(const char *key, const char *salt);

key是使用者的密碼。salt是兩個字,每個字可從[a-za-z0-9./]中選出來,因 此同一密碼增加了4096種可能性。透過使用key中每個字的低七位元,取得 56-bit關鍵字,這56-bit關鍵字被用來加密成一組字,這組字有13個可顯示的 ascii字,包含開頭兩個salt。

crypt在您有自行管理使用者的場合時使用,例如會員**、bbs等等。

範例一 : crypt_word.c

#include

#include

#include

void main(int argc,char **argv)

編譯

gcc -o crypt_word crypt.c -lcrypt

檢驗 請先看您的/etc/passwd,找乙個您自己的帳號,看前面兩個字,那是您自己的

salt。接下來輸入:

./crypt_word your_password salt

看看它們是否相同(應該要相同,除非您加了crypt plugin或使用不同的crypt function,例如shadow、pam,這種狀況下,加密字是不同的),另外檢驗看看 他們是否為13個字。

您也可以利用apache上所附的htpasswd來產生加密字做為驗證。

範例二: verify_passwd.c

注意,這個範例讀取/etc/passwd的資料,不適用於使用shadow或已經使用pam 的系統(例如slackware,redhat及debian在不外加crypt plugin的狀況下,應 當相同)。此範例僅供叄考,做為了解crypt函式運作的情形,真正撰寫程式 時,應該避免類似的寫法。

#include

#include

#include

typedef struct account;

/* 注意! 以下的寫法,真實世界的軟體開發狀況下,千萬不要用! */

int acc_info(char *info,account *user)

int read_password(char *filename,account *users)

fclose(fp);

return n;

} void main(int argc,char **argv)

else strcpy(username,argv[1]); /* 這是超級大安全漏洞 */

if (argc<3) else strcpy(password,argv[2]); /* 這是超級大安全漏洞 */

n = read_password("/etc/passwd",acc);

for (i=0,done=0;i if (strcmp(username,acc.username)==0) else

done = 1;

} if (!done) printf("invalid username!/n");

} 編譯

gcc -o verify_passwd verify_passwd.c -lcrypt

檢驗 ./verify_passwd your_username your_password

避免安全漏洞

buffer overflow是個很嚴重的安全漏洞,通常您不可使用像char buf[***x]的 宣告。在這一類與安全有相關的任何程式寫作中(不是只有密碼,例如像 www/ftp/telnet的這一類對外視窗都要算在內),您應該要先檢查字串長度。例 如以下例子:

len = strlen(incoming_username);

if (len>***) invalid;

new_string = (char*)malloc(len+1);

strcpy(new_string,incoming_username);

your_own_operations...

如此才能避免buffer overflow,萬萬不可濫做假設,切記切記,連許多數十年經驗豐富的老手都會犯這個錯誤。

與crypt函式相關者尚有以下三個:

void setkey (const char *key);

void encrypt (char *block, int edflag);

void swab (const char *from, char *to, ssize_t n);

一般來說,除非您有特殊需求,你不會用到這三個。

Linux程式設計入門 crypt

linux程式設計入門 crypt crypt是個密碼加密函式,它是基於data encryption standard des 演演算法。crypt基本上是one way encryption,因此它只適用於密碼的使用,不適合於資料加密。char crypt const char key,cons...

Linux程式設計入門 crypt

crypt是個密碼加密函式,它是基於data encryption standard des 演演算法。crypt基本上是one way encryption,因此它只適用於密碼的使用,不適合於資料加密。char crypt const char key,const char salt key 是使...

linux程式設計 入門

在這裡,我們僅僅介紹有關linux的基礎知識 1.什麼是unix2.gnu3.linux 準確的來說linux只是乙個作業系統的核心,最初它由林納斯 托瓦茲在大學期間創造,在1991年發布後,憑藉著開源的特性,linux發展迅猛,其在今天的伺服器領域無人能敵.而我們所說的linux作業系統其實是li...