【问题标题】:How to generate .htpasswd under PHPPHP下如何生成.htpasswd
【发布时间】:2012-05-08 11:13:31
【问题描述】:

我正在尝试生成具有大量用户 (100+) 的长 htpasswd 文件。

我在 Linux 服务器上的 DirectAdmin 面板生成 htpasswd 文件,其中密码哈希以 $1$ 开头。

我尝试过这样的事情:

function random_salt($length = 9) // 9 characters and $1$ = 12 characters
{      
    $chars = 'bcdfghjklmnprstvwxzaeiou';

    for ($p = 0; $p < $length; $p++)
    {
        $result .= ($p%2) ? $chars[mt_rand(19, 23)] : $chars[mt_rand(0, 18)];
    }

    return $result;
}

echo crypt($myplainpassword, "$1$".random_salt());

它产生以 $1$ 开头的哈希,但服务器不让我进入。我的密码是在 excel 中生成的 4 位随机“pin 码”。例子:

1215 5325 6261

我做错了什么?

【问题讨论】:

  • “我做错了什么?”...使用htpasswd
  • 你为什么使用 $1$ 作为盐的一部分?
  • 我同意 Petah 的观点 - 可能有比使用 htpasswd 更好的方法来保护资源。
  • 另外,请添加有关您的设置的更多详细信息 - 我只是假设您使用的是 apache?
  • 我使用 $1$ 作为 salt 的一部分,因为我在某处读到 apache 需要像这样的 md5 salt。

标签: php apache .htpasswd


【解决方案1】:

这就是我生成 .htpasswd 密码的方式...

$new_password = password_hash($old_password, PASSWORD_BCRYPT);

password_hash() 使用强单向创建一个新的密码哈希 哈希算法。 password_hash() 与 crypt() 兼容。 因此,由 crypt() 创建的密码哈希可以与 密码哈希()。

目前支持以下算法:

PASSWORD_BCRYPT - 使用 CRYPT_BLOWFISH 算法创建散列。 这将使用 "$2y$" 生成标准 crypt() 兼容哈希 标识符。结果将始终是 60 个字符的字符串,或 FALSE 关于失败。支持的选项:

http://php.net/manual/en/function.password-hash.php

【讨论】:

    【解决方案2】:

    我建议研究一下如何生成哈希的确切方式。如果您使用您的方法创建一个哈希,它看起来是否与 DirectAdmin 生成的相同?

    总的来说,我之前使用this 来生成条目。

    【讨论】:

    • 该链接的解决方案不起作用。我试过这个。从我粘贴的代码生成的哈希看起来与 DirectAdmin 中的相似,但它的值不同。盐是随机的,所以我认为不可能得到相同的值......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 2020-11-10
    • 2013-10-28
    • 1970-01-01
    相关资源
    最近更新 更多