#define _XOPEN_SOURCE
#include <unistd.h>
char *crypt(const char *key, const char *salt);
Link with -lcrypt.
以上是關於crypt函數的說明。參數key是待加密的字串,salt是影響加密結果的字串。
為了查看一個使用者輸入的密碼是否與該登入使用者的密碼一致,可以先獲得與當前登入使用者的使用者名稱,然後查看/etc/shadow檔案,從檔案中提取出salt,然後調用crypt進行計算,將得到的結果與/etc/shadow中的加密密碼欄位比較,若一致則說明使用者輸入密碼正確。
/etc/shadow檔案中的salt就是密碼欄位中的第一個"$"到第三個"$"的內容,如下是實驗機中的/etc/shadow檔案中一個使用者的密碼欄位,該密碼測試時用123456
$6$y9cP0qlmDYgBk6OZ$W25lC2x90QIrNde8TVJY.D2tjAiQUHF.oaPeKXZSpX93aGyN8lzyDeCOj2Dsl0g9TtTgz.tDfTOfpbyXvN0kP0
其中salt就是
$6$y9cP0qlmDYgBk6OZ$
下面是測試程式:
#include <stdio.h>#include <unistd.h>#include <stdlib.h>#define _XOPEN_SOURCEint main(void){ char *passwd; char key[] = "123456"; passwd = crypt(key, "$6$y9cP0qlmDYgBk6OZ$"); printf("password: %s\n", passwd); return 0;}
運行後輸出結果為:
password: $6$y9cP0qlmDYgBk6OZ$W25lC2x90QIrNde8TVJY.D2tjAiQUHF.oaPeKXZSpX93aGyN8lzyDeCOj2Dsl0g9TtTgz.tDfTOfpbyXvN0kP0