我正在做一個PAM類型的東西,它需要在/ etc/shadow中檢查用戶的密碼。在suse上的crypt導致段錯誤
通常,這涉及讀取加密ID,鹽和密碼的密碼行。使用ID和salt,可以使用crypt(3)或m_crypt(在同一手冊頁上)對用戶提供的密碼進行散列處理,並將結果進行比較。這在很多系統上都能正常工作,比如Ubuntu,但是我在SUSE上遇到了很多問題。
系統正在使用Blowfish,以及「正確處理8位字符」。這有一個哈希ID「2y」。不幸的是,每當crypt(3)被調用時,它就會發生段錯誤。 ID「2a」也是一樣,這是識別Blowfish的第一個代碼。所有其他哈希算法都可以工作。
由於/ etc/shadow文件有它的例子,系統必須有一個能夠進行Blowfish哈希的可操作的crypt(或等價物),但是我無法做到這一點。任何人都可以將我指向正確的方向嗎?
的段錯誤的一個例子:
#define _XOPEN_SOURCE
#include <unistd.h>
#include <stdio.h>
int main(int argc, char** argv) {
char *pass = "tqbfjotld";
char *salt = "$2y$10$";
char *pp = NULL;
pp = crypt(pass, salt);
printf("%s\n", pp);
return 0;
}
鹽$ 2A $ 10 $還示出了誤差。
它適用於其他系統,如Ubuntu,其他哈希算法可以在SUSE上正常工作。
有什麼想法嗎?
從來沒有用過自己,但'2a'是河豚,什麼是'2y'? –
對crypt的調用返回NULL的值。它是導致seg故障事件的printf(),因爲字符串參數爲NULL。 – user3629249
根據crypt的文檔,鹽必須是指向2個字符串的指針。當我僅使用兩個字符串作爲鹽時,它完美地工作。請閱讀crypt的手冊頁 – user3629249