我正在尝试安全地创建带有php脚本的系统用户,在那里,我希望能够使用php脚本散列密码,以便他们的密码在bash历史记录中无处可见。
如何获取字符串,并将其哈希,以便它是unix密码哈希?
$UX_PW = some_function('my_password');
exec("useradd -p $UX_PW newusername");
答案 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(),因为这允许您将哈希算法的字符串设置保留在其他位置。如果您的代码需要为其他环境使用不同的哈希算法,则只需更改字符串而不是函数名称。