Самый эффективный способ изменить хэш-тип пароля (md5-sha1)

У меня есть система, использующая MD5 для хеш-паролей от моих пользователей и сохраняющая ее в моей базе данных. Теперь я перехожу к другой системе, которая использует SHA1 (и уникальную систему SALT, а не уникальную для пользователя) для хеширования паролей.

Как мне заставить старый пароль MD5 пользователя превратиться в мой новый пароль SHA1 с PHP?

Вы не можете преобразовать md5 в sha но на самом деле ваши пользователи используют только пароль, когда они собираются about to login чтобы вы могли немного изменить свой скрипт, чтобы сделать обновление автоматически

 // 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 который является лучшим алгоритмом хэширования. Дополнительная информация о пароле_compat

Извините, вы не можете.

Лучшее, на что вы можете надеяться, это сохранить как версии MD5, так и SHA1, и заполнить контент SHA1, когда пользователь войдет в систему. Просто проверьте, доступна ли версия SHA1, и если не используете старую стратегию проверки.

В конце концов, вы должны перенести большинство своих пользователей на новую систему на основе SHA1 / SALT.

Вы не можете изменить хэш-тип без повторного ввода пароля. Они являются необратимыми односторонними хешами. Вы могли бы, я полагаю, попытаться выполнить поиск в радужном столе, но поскольку некоторые хэши имеют несколько столкновений, это не будет работать в 100% случаев. Кроме того, ваша соль сделает это неэффективным. В этом смысл иметь соль.

Для создания версий SHA1 вам понадобятся исходные пароли открытого текста. Однако MD5-хеширование, конечно, один из способов. Поэтому, если у вас нет простой текстовой версии паролей, вы не можете делать то, что хотите.

Вы можете создать второе поле SHA1 в своей таблице паролей, и когда пользователи войдут в систему, он сможет проверить хэш-код md5 (если еще нет хэша sha1), и если он верен, переустановите его в sha1 и сохраните. Когда все пользователи перейдут на SHA1, вы можете удалить поле md5. – Вы соленые хеши MD5?