MD5 и SHA1 считаются небезопасными, а SHA-1 лучше. Тем не менее, есть две вещи, которые вы должны учитывать:
Под «небезопасным» они подразумевают, что математически проще, чем грубая сила, определить значение перед хэшированием. Иногда это означает, что они могут сократить его с миллиарда вычислений до 900 миллионов, а иногда это значительно меньше. Это далеко не так небезопасно, как моя точка № 2.
Поскольку вы создаете хеш, хакеру легко определить пароли вашей базы данных, заполнив таблицу, заполненную общими паролями, и запустив ее через один и тот же алгоритм хеширования, независимо от того, какой вы используете. Это называется радужным столом.
Например, многие люди используют «пароль» и «Джон» в качестве своих паролей. В MD5 эти два пароля всегда генерируют для:
пароль: 5f4dcc3b5aa765d61d8327deb882cf99
Джон: 527bd5b5d689e2c32ae974c6229ff785
Так что, если вы просто используете MD5 для своих паролей, и кто-то достаточно наивен, чтобы сделать его своим паролем, он, вероятно, будет скомпрометирован, если хакер будет контролировать вашу базу данных и запускать ее по радужной таблице.
Однако, если вы добавите какую-то тарабарщину к каждому значению предварительного хэширования, например «password12345» и «johnxyz», то вы получите 2 совершенно разных хэша, которые будут отличаться от приведенных выше. Это называется солт-значением, и оно препятствует тому, чтобы радужные таблицы были настолько эффективными.
Я бы порекомендовал использовать наивысший уровень алгоритмов SHA, который вы можете использовать в своем языке программирования, и хешировать против солт-значения (вы можете создать «случайный», хешируя текущее время, если хотите), который вы сохранить в базе данных запись с хешированным паролем.
столбцы БД: Имя пользователя | Пароль | Соль
Это не самая безопасная система, о которой кто-либо когда-либо думал, но она, вероятно, будет работать для вас.