Насколько безопасен мой алгоритм хеширования?

Я пишу веб-сайт для личного пользования (надеюсь, но не думаю, что кто-нибудь когда-нибудь придет) и разработал следующий алгоритм:

function encryptPassword($username, $password) {
$username=md5($username);
$password=md5($password);

$newpass = substr($username, 0, 5) . $password . substr($username, 5 );
$newpass = md5($newpass);

return $newpass;
}

Поскольку это все еще своего рода система «знай пароль, и ты в системе» (как обычно, хотя), я думаю, что было бы лучше спрятать пароль в базе данных.

Ранее я использовал простой алгоритм MD5x1 (в основном: md5 (проход) и готово), но тогда люди, имеющие доступ к базе данных, легко могли бы отменить ее хеширование. Таким образом, я не думаю, что вы сможете отменить эту вещь.

-2

Решение

Это не.

  1. MD5 криптографически слаб.
  2. Соли должны быть случайными, а не полученными из известных значений.
  3. Один раунд хеширования тривиален в наши дни.

Решения вышеперечисленного:

  1. Используйте лучший алгоритм, предпочтительно SHA2 или лучше.
  2. Генерировать случайные соли.
  3. Хеширование нескольких раундов

Ой, подождите, в PHP уже есть целая библиотека, которая делает это, кроме путь лучше. Это password_hash(), и если вы используете версию PHP ранее, чем 5.5, когда она была реализована, есть password_compat который бэкпортирует его еще в 5.3.7, и если тот все еще не работает, вам действительно нужно обновить вашу установку PHP.

Наконец, если у вас нет образования в криптографии на уровне колледжа, вы никогда не должны пытаться «свернуть свои» схемы хеширования или шифрования. В 99% случаев вы получите гораздо менее безопасную систему, чем если бы вы использовали что-то стандартное для отрасли.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]