【问题标题】:Creating salt with Portable PHP password hashing framework使用便携式 PHP 密码散列框架创建 salt
【发布时间】:2011-06-15 21:47:27
【问题描述】:

我想使用Portable PHP password hashing framework 对密码进行哈希处理。但我发现它的演示不使用盐来散列密码。但是它使用虚拟盐来检查密码,我觉得这很奇怪,我根本不明白这个想法,

$dummy_salt = '$2a$08$1234567890123456789012';

if (isset($dummy_salt) && strlen($hash) < 20)
        $hash = $dummy_salt;

我想知道,如果我想使用可以生成唯一盐并将其存储在我的数据库中的每个用户的约定方法,我该如何使用便携式 PHP 密码散列框架来生成盐?

这是我用来散列密码的函数,但有人告诉我 sha512 与 sha1 有相同的问题,明智的做法是相信像便携式 PHP 密码散列框架这样的专家,

function hash_sha512($phrase,&$salt = null)
{
    //$pepper = '!@#$%^&*()_+=-{}][;";/?<>.,';

    if ($salt == '')
    {
        $salt = substr(hash('sha512',uniqid(rand(), true).PEPPER_KEY.microtime()), 0, SALT_LENGTH);
    }
    else
    {
        $salt = substr($salt, 0, SALT_LENGTH);
    }

    return hash('sha512',$salt.PEPPER_KEY.$phrase);
}

如果您有任何想法,请告诉我。谢谢。

【问题讨论】:

    标签: php hash hashcode password-protection salt-creation


    【解决方案1】:

    来自链接到该页面的phpass article

    除了实际的散列,phpass 透明地生成随机盐 当新密码或密码是 散列,它对散列类型进行编码, 盐和密码拉伸 迭代计数到“哈希 它返回的编码字符串”。当 phpass 验证密码或 针对存储的哈希的密码,它 同样透明地提取和 使用哈希类型标识符, 盐,以及迭代计数 “哈希编码字符串”。 因此,你 不需要费心加盐和 自己伸展 - phpass 需要 为您保管这些物品

    ...所以这些示例不使用加盐也就不足为奇了!您可能对代码进行了过度调整。

    带有虚拟盐的代码示例是一个示例,说明如何通过确保用户是否存在、用户的验证花费相同的时间来防止定时攻击,有效地通过对以下对象进行虚拟身份验证不存在的用户。它需要一个虚拟盐,因为如果用户不存在,它就没有存储的盐可供使用。

    【讨论】:

    • 谢谢。那么我应该使用虚拟盐来防止定时攻击吗?
    • @lauthiamkok 这取决于您,真的,并且取决于您的其余设置。例如,如果您的网站允许人们添加新帐户并告诉他们他们选择的用户名是否已经存在,那么阻止攻击者通过身份验证计时攻击解决同样的问题就没有多大意义了!
    猜你喜欢
    • 2018-07-29
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多