使用可移植PHP密码哈希框架创建salt

使用可移植PHP密码哈希框架创建salt,php,hash,hashcode,password-protection,salt-creation,Php,Hash,Hashcode,Password Protection,Salt Creation,我想用它来散列密码。但我发现它的演示并没有使用salt对密码进行哈希运算。但是它用了一个假盐来检查密码,我觉得很奇怪,我一点也不理解这个想法 $dummy_salt = '$2a$08$1234567890123456789012'; if (isset($dummy_salt) && strlen($hash) < 20) $hash = $dummy_salt; 我想知道,如果我想使用约定方法,我可以生成唯一的salt并将其存储在数据库中的每个用户,

我想用它来散列密码。但我发现它的演示并没有使用salt对密码进行哈希运算。但是它用了一个假盐来检查密码,我觉得很奇怪,我一点也不理解这个想法

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

if (isset($dummy_salt) && strlen($hash) < 20)
        $hash = $dummy_salt;
我想知道,如果我想使用约定方法,我可以生成唯一的salt并将其存储在数据库中的每个用户,我如何使用可移植的PHP密码哈希框架来生成salt

这是我用来散列密码的函数,但有人告诉我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);
}
如果你有任何想法,请告诉我。谢谢。

从该页面的链接到:

除了实际的散列,phpass 透明地生成随机盐 使用新密码或密码短语时 散列,并对散列类型进行编码, 盐,还有密码 迭代计数到散列中 对返回的字符串进行编码。什么时候 phpass验证密码或密码 针对存储的散列的密码短语,它 同样透明地提取和 使用哈希类型标识符 salt,迭代将从 哈希编码字符串。因此,你 不需要为盐和盐而烦恼 独自伸展-phpass需要 替你保管这些

…因此,示例中不使用盐渍也就不足为奇了!您可能对代码进行了过度调整

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

从该页面的链接到:

除了实际的散列,phpass 透明地生成随机盐 使用新密码或密码短语时 散列,并对散列类型进行编码, 盐,还有密码 迭代计数到散列中 对返回的字符串进行编码。什么时候 phpass验证密码或密码 针对存储的散列的密码短语,它 同样透明地提取和 使用哈希类型标识符 salt,迭代将从 哈希编码字符串。因此,你 不需要为盐和盐而烦恼 独自伸展-phpass需要 替你保管这些

…因此,示例中不使用盐渍也就不足为奇了!您可能对代码进行了过度调整


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

谢谢。那么我应该用假盐来防止定时攻击吗?@lauthiamkok这真的取决于你,取决于你的其他设置。例如,如果您的网站允许用户添加新帐户,并告诉他们所选择的用户名是否已经存在,那么阻止攻击者利用身份验证定时攻击解决相同问题就没有多大意义了!谢谢那么我应该用假盐来防止定时攻击吗?@lauthiamkok这真的取决于你,取决于你的其他设置。例如,如果您的网站允许用户添加新帐户,并告诉他们所选择的用户名是否已经存在,那么阻止攻击者利用身份验证定时攻击解决相同问题就没有多大意义了!