php 更改密码哈希类型的最有效方法(md5到sha1)

hgtggwj0  于 2023-02-11  发布在  PHP
关注(0)|答案(5)|浏览(167)

我有一个使用MD5来散列用户密码并将其存储到数据库中的系统,现在,我将改用另一个使用SHA1(和一个唯一的系统SALT,而不是用户唯一的)来散列密码的系统。
我如何管理得到用户旧的MD5密码变成我的新的SHA1密码与PHP?

ia2d9nvy

ia2d9nvy1#

您无法将md5转换为sha,但实际上您的用户只在登录时使用密码,因此您可以稍微修改脚本以自动执行更新

// The user is not authticated yet
$auth = false;
$updated = false;

// From your Login form
$user = $_POST['user'];
$pass = $_POST['pass'];

// Check If the username has update password
$udated = false; // not update
                  
// I gues you always do this
$password = $updated ? md5($pass) : sha1($pass);

// Do the autentication
// Slect from Database
// Check the data
// Set auth
$auth = true;

// Then chage the password
if ($auth == true && !$updated) {
    $newpassword = sha1($pass);
    // Connect to DB
    // Update the Password
    // Set Status to Updated in DB
    $udated = true;
}

// Better Approch
if ($auth == true && !$updated) {
    $newpassword = password_hash($password, PASSWORD_BCRYPT);
    // Connect to DB
    // Update the Password
    // Set Status to Updated in DB
    $updated = true;
}

我使用password_hash作为更好的方法,因为它使用Bcrypt,这是一个更好的哈希算法。

kuarbcqp

kuarbcqp2#

对不起,你不能。
您所能期望的最佳结果是同时存储MD5和SHA1版本,并在用户登录时填充SHA1内容。只需检查SHA1版本是否可用,如果不可用,则使用旧的验证策略。
最终,您应该透明地将大多数用户迁移到新的基于SHA1/SALT的系统。

jv4diomz

jv4diomz3#

如果用户不重新输入密码,你就不能改变哈希类型。它们是不可逆的单向哈希。我想,你可以尝试在彩虹表中查找,但由于某些哈希有多次冲突,这也不是100%有效的。而且,你的盐会使它无效。这就是有盐的意义所在。

k2arahey

k2arahey4#

你需要原始的明文密码来创建SHA1版本的密码,但是MD5散列法当然是一种方法,所以除非你碰巧有明文版本的密码,否则你就没有办法做你想做的事情。

guz6ccqo

guz6ccqo5#

你可以在你的密码表中建立第二个SHA1字段,当用户登录时,它可以检查md5散列(如果还没有sha1散列),如果它是正确的,重新散列到sha1并存储它。一旦所有的用户都切换到SHA1,你可以删除你的md5字段。

相关问题