我試圖用php腳本安全地創建系統用戶,在那裏,我想能夠使用php腳本來哈希密碼,以便他們的密碼在bash的歷史中並沒有出現。我如何使用php創建一個unix密碼哈希
如何獲得一個字符串,並散列它,因此它是一個Unix密碼散列?
$UX_PW = some_function('my_password');
exec("useradd -p $UX_PW newusername");
我試圖用php腳本安全地創建系統用戶,在那裏,我想能夠使用php腳本來哈希密碼,以便他們的密碼在bash的歷史中並沒有出現。我如何使用php創建一個unix密碼哈希
如何獲得一個字符串,並散列它,因此它是一個Unix密碼散列?
$UX_PW = some_function('my_password');
exec("useradd -p $UX_PW newusername");
它是crypt()
,它實現了UNIX密碼哈希。
http://us.php.net/manual/en/function.crypt.php
根據您的系統,你要麼尋找crypt()
或md5()
。
傳統上,unix使用DES加密的密碼(即'crypt'函數)和2個字符的鹽(來自集[a-zA-Z0-9./]的兩個隨機字符)哈希來干擾算法。
較新的系統通常使用MD5。
使用crypt。最近的linux/unix使用CRYPT_MD5或 CRYPT_BLOWFISH。 MD5是最廣泛支持的一個。 DES的是舊系統。
另外我應該注意MD5版本不是一個簡單的MD5求和操作,它也使用「鹽」值使得哈希不可預先計算。 [[我編造了這個術語:)]]
在UNIX,Linux和其他類似UNIX的POSIX操作系統上使用的密碼哈希差異很大。大多數「passwd
」哈希方法使用修改的 DES算法(不是真正的DES),它們可以多次對輸入應用哈希,並且它們使用16位或24位的鹽。生成passwd兼容哈希的方法的具體答案取決於您使用的是哪種操作系統。
crypt()
系統調用應該是根據您的操作系統進行密碼散列的方式。您可以使用功能crypt()
以PHP訪問它。
至於要使用哪種密碼算法,這取決於您的操作系統。
從Ubuntu的無畏手冊頁上的passwd(更改密碼)
密碼的安全性取決於加密算法的強度和密鑰空間的大小。 UNIX系統加密方法基於 NBS DES算法,並且非常安全。密鑰空間的大小取決於所選密碼的隨機性。
此外,您可能更喜歡hash(),而不是使用crypt(),因爲它允許您保留哈希算法在其他地方的字符串設置。如果您的代碼需要爲其他環境使用不同的散列算法,則只需更改字符串而不是函數的名稱。
我如何知道使用哪種算法? (Ubuntu 7.10) – 2009-01-23 21:51:10