我正在使用本教程来帮助我在创建帐户时对用户密码进行加盐和哈希处理,然后在用户输入密码登录时将这些密码带回并进行比较。
在这篇文章中,他们有两个我想调用的函数。
create_hash()
和
validate_hash()
随后,我自己创建了另一个函数来分解结果,这样我就可以从整个函数中去掉加盐的字符串。
function explode_hash($password) {
return substr( $password, strrpos( $password, ':' ) + 1);
}
所以当我在数据库中插入数据时,它看起来像这样
INSERT INTO `users` (`id`, `email`, `passwd`, `passwdhash`)
VALUES
(1,'email@email.com','sha256:1000:mvhkKCAoLgCHb2/Ie0muPIRH0YISriOr:+Ak9g9KV1BPMIRjUorx3/auhU5dgH0lS','+Ak9g9KV1BPMIRjUorx3/auhU5dgH0lS');
请注意,最后一列包含第三列中字符串的最后一部分。
所以最后一步是登录时用户将输入他们的电子邮件和密码,我的系统将从数据库中获取哈希(基于电子邮件)并通过名为的函数运行它
validate_hash()
但结果总是错误的。
有人会花几分钟时间查看这些步骤并尝试了解我无法进行正确比较的原因吗?