2009-01-23 100 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(),因为它允许您保留哈希算法在其他地方的字符串设置。如果您的代码需要为其他环境使用不同的散列算法,则只需更改字符串而不是函数的名称。