如何使用php创build一个unix密码哈希值

我试图用php脚本安全地创build系统用户,因此,我希望能够使用PHP脚本来散列密码,以便他们的密码在bash历史logging中无处显示。

如何获取一个string,并散列,所以它是一个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求和操作,它也使用“salt”值使得哈希不可预先计算。 [[我编了这个词:)]]

在UNIX,Linux和其他像UNIX的POSIX操作系统上使用的密码哈希差异很大。 大多数“ passwd ”哈希方法使用修改的 DES算法(不是真正的DES),他们可能多次对输入应用散列,并使用16位或24位的盐。 生成passwd兼容哈希的方法的具体答案取决于您正在使用的操作系统。

crypt()系统调用应该是根据您的操作系统进行密码散列的方式。 您可以使用函数crypt()在PHP中访问它。

至于要使用哪种密码算法,这取决于你的操作系统。

从passwd上的Ubuntu Intrepid手册页(更改密码)

密码的安全性取决于加密算法的强度和密钥空间的大小。 UNIX系统加密方法基于NBS DES算法 ,非常安全。 密钥空间的大小取决于所选密码的随机性。

此外,而不是使用crypt()你可能更喜欢hash(),因为这可以让你保留哈希算法在其他地方的字符串设置。 如果您的代码需要为其他环境使用不同的散列算法,则只需更改字符串而不是函数的名称。