从md5迁移到PBKDF2怎么样?

时间:2013-09-25 07:54:16

标签: php mysql security php-5.3 pbkdf2

我需要将基于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)。

1 个答案:

答案 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');
}