我需要将基于md5的简单身份验证模块升级到PBKDF2,我正在寻找可能的架构和额外步骤以及操作流程和以下所需的更改:
一个。新用户帐户创建 旧的最简单的一个:密码= md5(密码)
湾密码重置
curently:
update authtable set password=md5(newpassword) where password=md5(oldpwd)
and username='usernamexyz';
℃。身份验证
select id, username from authtable where password=md5(pwd) and username='usernamexyz';
模式:
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(60) NOT NULL DEFAULT '',
`password` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8
我没有看到任何有关如何实现的教程/文章,数据库模式问题,数据库中的密码/ salt长度等。与PBKDF2有关。我可能错过了,请提供参考。
有人可以解释如何使用php / mysql实现PBKDF2的这些黑暗角落。
由于我使用的是php 5.3,我将无法使用build-in PBKDF2函数(即至少需要php 5.5)。
答案 0 :(得分:2)
要升级,您必须添加新列,您将存储由pbkdf2散列的密码。这最初是空的。然后进行以下更改:
一个。 PHP:$password_pbkdf2 = create_hash($password)
。 SQL:password_pbkdf2 = '$password_pbkdf2', password = ''
湾身份验证,如c。然后在。
中设置密码℃。 SQL:select password, password_pbkdf2 where username='usernamexyz'
PHP:
if($password_pbkdf2) {
if(validate_password($submitted_password, $password_pbkdf2) === false) {
die('wrong username/pw');
}
} elseif($password === md5($submitted_password)) {
// do a. with $submitted_password
} else {
die('wrong username/pw');
}