定義函數 |
char * crypt (const char *key,const char * salt); |
函數說明
crypt是個密碼加密函數,它是基於Data Encryption Standard(DES)演算法。crypt只適用於密碼的使用,不適合用於資料加密。
crypt()將參數key所指的字符串加以加密,key字符串長度僅取前8個字符,超過此長度的字符沒有意義。參數salt為兩個字符組成的字符串,由a-z、A-Z、0-9,“.”和“/”所組成,用來決定使用4096 (a-z、A-Z、0-9,“.”和“/”共64個字符,64的平方為4096)種不同內建表格的哪一個。函數執行成功后會返回指向編碼過的字符串指針,參數key 所指的字符串不會有所更動。編碼過的字符串長度為13 個字符,前兩個字符為參數salt代表的字符串。
返回值
返回一個指向以NULL結尾的密碼字符串。
注意編譯時要在末尾添加-lcrypt選項。
/**
* gcc -o crypt crypt.c -lcrypt
*/
#include <unistd.h>
#include <crypt.h>
#include <string.h>
int main(void)
{
char passwd[13];
char *key;
char slat[2];
key = getpass("Input First Password:");
slat[0] = key[0];
slat[1] = key[1];
strcpy(passwd,crypt(key,slat));
key = getpass("Input Second Password:");
slat[0] = passwd[0];
slat[1] = passwd[1];
printf("After crypt(),1st passwd :%s/n", passwd);
printf("After crypt(),2nd passwd:%s /n", crypt(key,slat));
return 0;
}
程序運行結果:(注:兩次輸入一樣)
Input First Password:
Input Second Password:
After crypt(),1st passwd :asZvhAtTX.i7g
After crypt(),2nd passwd:asZvhAtTX.i7g
表頭文件:#include <unistd.h>
函數定義:char *getpass(const char *prompt)
函數說明:getpass()會顯示參數prompt所指的字符串,然后從/dev/tty中讀取所輸入的密碼,若無法從/dev/tty中讀取則會轉從標准輸入設備中讀取密碼。所輸入的密碼長度限制在128個字符,包含結束字符NULL, 超過長度的字符及換行字符/n將會被忽略。在輸入密碼時getpass()會關閉字符回應,並忽略一些信號如CTRL-C 或 CTRL-Z所產生的信號
返回值 :返回一個指向以NULL結尾的密碼字符串
附加說明:為了系統安全考慮,在般在使用getpass()輸入密碼后,該密碼最好盡快處理完畢,然后將該密碼字符串清除
范例參crypt()