php шифрование паролей

Хорошо, я знаю, что эта тема много поднимается в stackoverflow, но они не подчеркивают ответы, которые они ищут.

Я использую шифрование md5, которое я сказал (было давно, когда я был noob на php) был в безопасности, но если вы посмотрите на старый добрый Google, он зашифровал и расшифровал.

поэтому я начал искать другие места, ака.

ive слышал обо всех методах шифрования, например, SHA-1, MD5, SHA-2, SHA-256, SHA-512 и так далее.

Многие говорят, что используйте Bcrypt, который я просматриваю, это против SHA-512.

и люди говорят, что используют случайную соль и сохраняют ее в вашей базе данных, что является глупым, потому что говорят, что хакер взламывает вашу базу данных и получает соль всех ваших паролей, поэтому это небольшое окно, чтобы изменить все соли, прежде чем хакер расшифровывает все пароли и отправляется в другие места и попробовать их, например, facebook, google и stackoverflow

Поэтому мой вопрос – это самый безопасный способ сделать это так (шифрование (с SHA-512) и использование случайной соли, которая также будет храниться в базе данных) или использовать фиксированную соль, которая жестко связана с моим php-кодом, который имеет такой же размер безопасности, как и случайная соль базы данных.

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

ОН почти забыл, и безопаснее ли вы шифровать пароль несколько раз или примерно такое же, как только одно шифрование?

Спасибо вам за помощь в написании письменного сообщения

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

простите за это

Related of "php шифрование паролей"

Я использую шифрование md5, которое я сказал (было давно, когда я был noob на php) был в безопасности, но если вы посмотрите на старый добрый Google, он зашифровал и расшифровал.

Сначала немного придирки. Это хеширование, а не шифрование. Хеширование – это один из способов. Теперь, чтобы ответить на ваш вопрос: не используйте md5() для хэш-паролей. Это уже не безопасно. Он был сломан в течение нескольких лет. Не только обнаружены столкновения (несколько значений, которые приводят к одному и тому же хэшу), но md5 может быть на самом деле очень быстрым с любым достойным графическим процессором.

Многие говорят, что используйте Bcrypt, который я просматриваю, это против SHA-512

Вы должны использовать bcrypt. Это лучший вариант для хэширования паролей.

и люди говорят, что используют случайную соль и сохраняют ее в вашей базе данных, которая является глупой

Нет, это не глупо. Соливные пароли не позволяют злоумышленнику создать радужный стол для всех ваших паролей. ircmaxell создал пароль для вашего удобства, который можно найти на GitHub .

Некоторые связанные статьи и сообщения переполнения стека:

  • Существуют ли более современные методы хэширования паролей, чем bcrypt и scrypt?
  • Часто задаваемые вопросы по bcrypt
  • Достаточно с таблицами Rainbow: что вам нужно знать о безопасных схемах паролей
  • Как вы используете bcrypt для хеширования паролей в PHP?
  • Представляем: PasswordLib
  • Правильно солить пароли, дело против перца
  • Штрих-код для хранения паролей OWASP

Обновить

Когда PHP 5.5 будет выпущен, он представит простой способ правильно шифровать ваши пароли. Он будет использовать bcrypt по умолчанию и автоматически добавлять соль к вашим паролям. Когда в будущем станет доступен лучший алгоритм (например, scrypt), он сможет его использовать. Для получения дополнительной информации см. RFC об этой новой функции . Он также будет иметь функцию, которая обнаруживает используемый алгоритм существующих хэшированных паролей и автоматически может обновлять их, когда пользователи будут подключаться к более новому (/ безопасному) алгоритму, когда это доступно. Для примеров реализации проверьте этот GitHub .

Если вы все еще на старой версии PHP и не можете обновить, существует чистая реализация PHP API C, доступная с поддержкой PHP> = 5.3.7 . Этот совместимый API использует ту же самую реализацию, что и API C.

Примечание: было бы лучше использовать более безопасный скрин, но до сих пор PHP не поддерживает его. Если это произойдет в какой-то момент, я обновлю этот ответ.

Вы смешиваете хэширование с помощью шифрования .

Я солью с определенными символами из имени пользователя, а также с строкой в ​​php-коде. Теоретически им нужен код и db, чтобы понять это.

Соль стоит того, что предотвращает предварительное вычисление всех возможных результатов. Несколько раундов также помогают замедлить работу, но не так много, если кто-то получает доступ к хэшам и имеет в своем распоряжении несколько графических процессоров. Чтобы ответить на вопрос конкретно, если бы я был вами, и я мог бы использовать bcrypt, то я бы это сделал. Если вы решите только хэш SHA-512, используйте соль и несколько раундов (десятки тысяч раундов).

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

Июнь 2015 г. Обновление:

Как заявил @PeeHa, PHP 5.5 включает встроенный механизм и краткое руководство / объяснение для реализации хешированного пароля с PHP. Вы можете проверить его Хейшинг .

Хеширование пароля возможно с помощью следующих методов:

  • string password_hash ( string $password , integer $algo [, array $options ] )

password_hash () создает новый хэш пароля с использованием сильного одностороннего алгоритма хэширования. password_hash () совместим с crypt (). Следовательно, хэши паролей, созданные crypt (), могут использоваться с password_hash ().

  • boolean password_verify ( string $password , string $hash )

Проверяет, соответствует ли данный хеш данному паролю.

Вероятно, вы получите данные от пользователя, поэтому, чтобы предотвратить SQL Injection, я бы рекомендовал использовать эти методы для очистки ввода:

Вы можете использовать подготовленный оператор, который позволяет безопасно вставлять данные пользователя в SQL-запрос:

  $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)"); $stmt->bindParam(':name', $name); $stmt->bindParam(':value', $value); $name = 'one'; $value = 1; $stmt->execute(); 

Дополнительная информация о подготовленном заявлении в ответ @ Theos .

Другие альтернативы очищают строки ввода пользователя:

  • string stripslashes ( string $str )

Пример использования stripslashes () – это когда включена директива PHP magic_quotes_gpc (она была включена по умолчанию перед PHP 5.4), и вы не вставляете эти данные в место (такое как база данных), которое требует экранирования. Например, если вы просто выводите данные прямо из HTML-формы. API-интерфейс stripslashes

  • string mysqli::escape_string ( string $escapestr )

Эта функция используется для создания законной строки SQL, которую вы можете использовать в инструкции SQL. Данная строка кодируется в экранированную строку SQL с учетом текущего набора символов соединения. API-интерфейс real_escape_string