如何使用php创建unix密码哈希

时间:2009-01-23 21:41:25

标签: php security unix hash passwords

我正在尝试安全地创建带有php脚本的系统用户,在那里,我希望能够使用php脚本散列密码,以便他们的密码在bash历史记录中无处可见。

如何获取字符串,并将其哈希,以便它是unix密码哈希?

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

5 个答案:

答案 0 :(得分:5)

实现UNIX密码散列的crypt() http://us.php.net/manual/en/function.crypt.php

答案 1 :(得分:2)

您可能正在寻找crypt()md5(),具体取决于您的系统。

传统上,unix使用DES加密的密码(即'crypt'函数),带有2个字符的salt(集合中的两个随机字符[a-zA-Z0-9./]),它们被添加到哈希来扰乱算法。

较新的系统通常使用MD5。

答案 2 :(得分:2)

使用crypt。最近的linux / unix使用CRYPT_MD5或 crypt_blowfish的。 MD5是受支持最广泛的一种。 DES适用于旧系统。

另外我应该注意到MD5版本不是一个简单的MD5求和操作,它还使用“salt”值来使哈希值不可预测。 [[我编造了这个术语:)]]

答案 3 :(得分:0)

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

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

至于使用哪种crypt算法,这取决于您的操作系统。

答案 4 :(得分:0)

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

  

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

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