2013-09-25 40 views
1

我需要將基於md5的簡單認證模塊升級到PBKDF2,並且我正在尋找可能的模式和額外步驟以及操作流程和所需的更改:從md5移動到PBKDF2如何?

a。新用戶帳戶創建 舊的是最簡單的一個:password = md5(密碼)

b。密碼重置

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 

我沒有看到關於如何實現任何教程/條,DB模式的擔憂,數據庫等的密碼/鹽長度..有關PBKDF2。我可能錯過了,請給出參考。

有人可以在這些黑暗角落闡明如何使用php/mysql實現PBKDF2。

由於我使用的是PHP 5.3,我將無法使用build-in PBKDF2函數(即它需要php 5.5以上版本)。

回答

2

要進行升級,您必須添加新列,您將在其中存儲由pbkdf2散列的密碼。這將最初是空的。然後做這些更改:

a。 PHP:$password_pbkdf2 = create_hash($password)。 SQL:password_pbkdf2 = '$password_pbkdf2', password = ''

b。身份驗證在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'); 
} 
+0

我們現在需要密碼嗎?我懷疑哈希字符串的所有信息格式如下:algorithm:iterations:salt:hash – sakhunzai

+0

如果您注意到只存儲哈希密碼 – Marek