Это хорошая функция хеширования пароля в PHP? Если нет, то почему?

Расширяясь в ответе @ rado выше, вы также можете использовать тройную инструкцию для принудительного возврата истинных или ложных логических значений без использования двойных импульсов. Конечно, версия с двойным логическим отрицанием является более кратким, но, вероятно, труднее читать для новичков (например, я).

class String
  def is_i?
     self =~ /\A[-+]?[0-9]+\z/ ? true : false
  end
end
22
задан Jimbo 13 June 2013 в 13:39
поделиться

2 ответа

Быстрый ответ:

Используйте библиотеку bcrypt (когда она готова) или password_compat из ircmaxell - это библиотека bcrypt.

Длинный ответ:

Это слишком сложно и устарело для современной технологии. Md5 следует избегать, и просто засолки недостаточно. Используйте bcrypt и избавьте себя от головной боли.

Вы можете спросить себя, почему именно эта библиотека? Ну, те же функции будут доступны в php 5.5, поэтому вам не придется менять кодировку. Желаем удачи и делайте это простым и эффективным. Также медленно работает для входа и ввода пароля.

Обновление 1

@ Gumbo -> Ни один MD5 не сломан, но основное назначение хэшей, таких как MD5 сейчас и в прошлом, было для проверки файлов (как вы знаете, проверять, можно ли доверять содержимому файла, а НЕ хранить пароли), поскольку хэши очень быстро расшифровываются, поскольку вы не будете использовать Bcrypt для проверки содержимого файла, так как вы ждете 30 - 45 секунд ... Таким образом, это означает, что хеш специально предназначен для быстрого чтения. Даже SHA512 по сравнению с bcrypt по-прежнему полностью уступает. Вот почему настоятельно необходимо использовать надежные алгоритмы паролей, такие как Blowfish / Bcrypt в PHP. Мы, как пользователи, так и программисты, должны расширить знания о том, что простое хранение паролей или алгоритмы хэширования низкого уровня НЕ являются ответом и никогда не должны использоваться для такой важной информации.

Теперь, чтобы OP перейти на новую систему, вы должны сначала отправить всем пользователям уведомление о том, что «В целях безопасности обновлена ​​система шифрования паролей ........», затем вы будет запрашивать у них одноразовое обновление пароля; после обновления пароля вы будете использовать функцию password_verify, и если вы хотите максимально контролировать соотношение затрат, вы используете password_needs_rehash, если по какой-либо причине вы решите изменить связанную стоимость с паролями.

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

Надеемся, что это ответит на большинство вопросов, но ответ IRCmaxell тем не менее намного лучше, если углубляться в детали различных алгоритмов! Удачи, ОП, и большое спасибо ircmaxell!

Обновление 2

Кроме того, будет ли пароль, хранящийся в таком виде, действительно взломан? как? (Мне становится любопытно)

Любая вещь и все сломано - вот что говорит мне мой профессор по безопасности в сети ... Я смеялся над ним. Теперь, когда я вижу вещи в его глазах ... ну да ... это абсолютно верно!

Bcrypt CURRENTLY - лучший способ хранения паролей! Однако, если вы посмотрите на Scrypt, это выглядит многообещающе, но не поддерживается PHP. Тем не менее, любая вещь и все сломано, это просто вопрос времени, пока какой-нибудь "выродок" в подвале взломает Bcrypt. Но сейчас мы в безопасности ... точно так же, как мы в безопасности, когда IPv4 никогда не заканчивается ... о, подождите? ...;)

Надеюсь, это ответит на вашу проблему, которую вы подняли, сэр. Кроме того, просто чтобы выразить это в контексте, моя система стоит 17, и для входа в нее требуется ~ 20 - ~ 30 секунд, но когда я представил систему своему профессору и моим клиентам, и почему она должна быть обязательной, они полюбили ее и чувствовал себя уверенным, что они были защищены.

19
ответ дан Rixhers Ajazi 13 June 2013 в 13:39
поделиться

Я бы выбрал bcrypt. Это хорошо Помимо включения соли для защиты от атак радужного стола, bcrypt является адаптивной функцией: со временем счетчик итераций может быть увеличен, чтобы сделать его медленнее, поэтому он остается устойчивым к грубым атакам. форсировать поисковые атаки даже при увеличении вычислительной мощности.

Реализация: Как вы используете bcrypt для хеширования паролей в PHP?

1
ответ дан 2 revs 13 June 2013 в 13:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: