2009-01-23 93 views
1

我試圖用php腳本安全地創建系統用戶,在那裏,我想能夠使用php腳本來哈希密碼,以便他們的密碼在bash的歷史中並沒有出現。我如何使用php創建一個unix密碼哈希

如何獲得一個字符串,並散列它,因此它是一個Unix密碼散列?

$UX_PW = some_function('my_password'); 
exec("useradd -p $UX_PW newusername"); 

回答

2

根據您的系統,你要麼尋找crypt()md5()

傳統上,unix使用DES加密的密碼(即'crypt'函數)和2個字符的鹽(來自集[a-zA-Z0-9./]的兩個隨機字符)哈希來干擾算法。

較新的系統通常使用MD5。

2

使用crypt。最近的linux/unix使用CRYPT_MD5或 CRYPT_BLOWFISH。 MD5是最廣泛支持的一個。 DES的是舊系統。

另外我應該注意MD5版本不是一個簡單的MD5求和操作,它也使用「鹽」值使得哈希不可預先計算。 [[我編造了這個術語:)]]

0

在UNIX,Linux和其他類似UNIX的POSIX操作系統上使用的密碼哈希差異很大。大多數「passwd」哈希方法使用修改的 DES算法(不是真正的DES),它們可以多次對輸入應用哈希,並且它們使用16位或24位的鹽。生成passwd兼容哈希的方法的具體答案取決於您使用的是哪種操作系統。

crypt()系統調用應該是根據您的操作系統進行密碼散列的方式。您可以使用功能crypt()以PHP訪問它。

至於要使用哪種密碼算法,這取決於您的操作系統。

0

從Ubuntu的無畏手冊頁上的passwd(更改密碼)

密碼的安全性取決於加密算法的強度和密鑰空間的大小。 UNIX系統加密方法基於 NBS DES算法,並且非常安全。密鑰空間的大小取決於所選密碼的隨機性。

此外,您可能更喜歡hash(),而不是使用crypt(),因爲它允許您保留哈希算法在其他地方的字符串設置。如果您的代碼需要爲其他環境使用不同的散列算法,則只需更改字符串而不是函數的名稱。