基本php pbkdf2哈希

基本php pbkdf2哈希,php,hash,salt,pbkdf2,Php,Hash,Salt,Pbkdf2,我对php比较陌生,当涉及到散列密码(我想是吧?)时,我才刚刚开始掌握salt的要点。不管怎样,这是我的问题 现在我有一个mysql数据库,有用户名、密码和盐域。密码字段长度为64个字符,salt字段长度为3个字符。注册后,每个用户名都会被随机分配一个salt。我没有任何问题(我相信)。首先,通过以下方式散列用户所需的密码: $hashedinput = hash ('sha256', $input); 然后,通过以下过程,使用pbkdf2中包含的salt散列用户所需的密码,并将其输入数据库:

我对php比较陌生,当涉及到散列密码(我想是吧?)时,我才刚刚开始掌握salt的要点。不管怎样,这是我的问题

现在我有一个mysql数据库,有用户名、密码和盐域。密码字段长度为64个字符,salt字段长度为3个字符。注册后,每个用户名都会被随机分配一个salt。我没有任何问题(我相信)。首先,通过以下方式散列用户所需的密码:

$hashedinput = hash ('sha256', $input);
然后,通过以下过程,使用pbkdf2中包含的salt散列用户所需的密码,并将其输入数据库:

$password = pbkdf2('sha256', $hashedinput, $salt, 10000, 64);
我的问题是登录。将数据库中的哈希密码与用户输入的密码进行比较时,它总是返回!=。以下是我验证登录的步骤:

$userData = mysql_fetch_array($search, MYSQL_ASSOC);
$inputhash = hash('sha256', $input); // From Form
$salt = $userData['salt']; // Salt from DB
$password = pbkdf2('sha256', $inputhash, $salt, 10000, 64);
$knownpassword = $userData['password']; // Known password from DB
因此,为了排除故障,我回显了所有输出,这是我输入正确密码时的样子(它不会让我登录):

输入密码:3D8BC905668C1A1CCA5B53A78941AD3CA4673E12DF6AC5E98E19FA47B153406F6E66913E43BF60478907CA07429B0CF90C808CE2097E0544CC44D298BFB7B85AD

数据库密码:3D8BC905668C1A1CCA553A78941D3CA4673E12DF6AC5E98E19FA47B153406F6

请注意,输入密码的前64个字符是正确的,但它将继续使用,总共128个字符。DB密码仅为64

提前谢谢

托马斯·普塔切克(Thomas Ptacek)不久前详细解释了什么是salt,它为什么有用,并给出了关于密码哈希系统的#1规则:

使用其他人的密码系统。不要建造你自己的

如果要在应用程序中使用PHP5.5,请使用新的API;如果没有,请确保至少使用PHP5.3并使用。托马斯·普塔切克(Thomas Ptacek)不久前详细解释了什么是salt,它为什么有用,并给出了关于密码哈希系统需要记住的#1规则:

使用其他人的密码系统。不要建造你自己的


如果要在应用程序中使用PHP5.5,请使用新的API;如果没有,请确保至少使用PHP5.3并使用。它们的设计目的是为您消除所有的痛苦。

谢谢!那个API非常有用。谢谢!这个API非常有用。