У меня есть система, использующая 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?