【问题标题】:How do I create a unix password hash with php如何使用 php 创建 unix 密码哈希
【发布时间】:2009-01-23 21:41:24
【问题描述】:

我正在尝试使用 php 脚本安全地创建系统用户,我希望能够使用 php 脚本对密码进行哈希处理,以便他们的密码不会出现在 bash 历史记录中。

如何获取一个字符串,并对其进行哈希处理,使其成为 unix 密码哈希?

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

【问题讨论】:

    标签: php security unix hash passwords


    【解决方案1】:

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

    【讨论】:

    • 我如何知道使用哪种算法? (Ubuntu 7.10)
    【解决方案2】:

    根据您的系统,您可以查找crypt()md5()

    传统上,unix 使用 DES 加密的密码(即“crypt”功能),并带有 2 个字符的 salt(来自集合 [a-zA-Z0-9./] 的两个随机字符)散列来扰乱算法。

    不过,较新的系统通常使用 MD5。

    【讨论】:

      【解决方案3】:

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

      另外我应该注意,MD5 版本不是简单的 MD5 求和运算,它还使用“盐”值来使哈希值不可预计算。 [[这个词是我编的:)]]

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-12-20
            • 1970-01-01
            • 1970-01-01
            • 2014-05-15
            • 2015-05-12
            • 1970-01-01
            相关资源
            最近更新 更多