1

我需要将基于 md5 的简单身份验证模块升级到PBKDF2,并且我正在寻找可能的架构和额外的步骤和操作流程以及以下所需的更改:

一个。创建新用户帐户 旧的最简单的一种:password=md5(password)

湾。重设密码

目前:

update authtable set password=md5(newpassword) where password=md5(oldpwd)
and username='usernamexyz';

C。验证

 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

我没有看到任何关于如何实现的教程/文章,数据库架构问题,数据库中的密码/盐长度等..与 PBKDF2 相关。可能漏掉了,求参考。

有人可以阐明如何使用 php/mysql 实现 PBKDF2 的这些黑暗角落。

由于我使用的是 php 5.3,我将无法使用内置的 PBKDF2函数(即它至少需要 php 5.5)。

4

1 回答 1

2

要升级,您必须添加新列,您将在其中存储由 pbkdf2 散列的密码。这最初是空的。然后做这些改变:

一个。php: $password_pbkdf2 = create_hash($password). SQL:password_pbkdf2 = '$password_pbkdf2', password = ''

湾。认证如 c。然后将密码设置为a。

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');
}
于 2013-09-25T08:51:17.030 回答