Шифрование / дешифрование паролей к базе данных MySQL и обратно - PullRequest
6 голосов
/ 20 февраля 2011

Я начинаю создавать пользовательскую систему для своего сайта, и я хочу, чтобы пароли были зашифрованы, а не в виде открытого текста.Я использую PHP / MySQL, поэтому я решил, что crypt() - хорошее место для начала.Тем не менее, я новичок в криптографии, подобной этой, и мне трудно понять, как именно она работает.Кто-нибудь знает, как реализовать, на самом простом уровне, способ хранения паролей в виде зашифрованной строки, но всегда иметь возможность расшифровки без проблем с безопасностью?

Ответы [ 7 ]

6 голосов
/ 20 февраля 2011

Пароли должны быть хешированы, а не зашифрованы. То есть вы не сможете расшифровать пароль. Вместо этого вы должны сравнить хэши.

  1. Пользователь устанавливает пароль $password = 'hX4)1z'
  2. Вы получаете хэш пароля и сохраняете в БД:

#

$pw = hash_hmac('sha512', 'salt' . $password, $_SERVER['site_key']);
mysql_query('INSERT INTO passwords (pw) VALUES ('$pw');
  1. Клиент возвращается позже. Они вводят свой пароль, и вы сравниваете его:

#

mysql_query('SELECT pw FROM passwords WHERE user_id = ?');
//$pw = fetch

if ($pw == hash_hmac('sha512', 'salt' . $_REQUEST['password'], $_SERVER['site_key']) {

   echo "Logged in";

}
2 голосов
/ 01 марта 2011

Я замечаю, что люди заключают огромные сделки по хранению паролей.

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

Кроме того, если вы шифруете с помощью алгоритма, который вы можете расшифровать позже, его также можно взломать, выяснив алгоритм шифрования.

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

2 голосов
/ 20 февраля 2011

PHP имеет некоторые встроенные функции, такие как md5 () .Когда я учился, я нашел учебник IBM очень полезным - я очень рекомендую взглянуть на это.

В качестве отступления я бы посоветовал против возможности расшифровкипароль.Единственный человек, который должен знать их пароль, это пользователь!Вот почему мы храним хешированные версии паролей, которые мы можем проверять, вместо того, чтобы хранить зашифрованные пароли, которые можно расшифровать.

1 голос
/ 20 февраля 2011

Нет, всегда будет проблема безопасности в том, где вы храните пароль шифрования.Вот почему веб-сайты никогда не хранят хэш пароля, а не сам пароль.Когда кто-то регистрируется на вашем веб-сайте и вводит пароль, вы сохраняете хэш (MD5 или SHA1 или любой другой, как указано выше) пароля.Когда они входят в систему позже, вы снова хешируете введенный ими пароль (тем же способом, который использовался при его сохранении) и сравниваете.Если хэши одинаковы, то пароли одинаковы (с очень высокой вероятностью!). Любой веб-сайт, позволяющий восстановить пароль, является небезопасным веб-сайтом.

1 голос
/ 20 февраля 2011

Я предлагаю использовать SHA2 с солью для хранения вашего пароля.

Чтобы создать хэш SHA2, используйте:

$hash = hash("sha512", $password.$salt);

Соль содержит несколько дополнительных символов, которые нужно добавить к вашему паролю.перед попыткой предотвратить радужные таблицы (базы паролей и их хэши).Вы можете создать его, используя уникальную информацию о пользователе (например, user_id), или просто создать случайную и сохранить ее где-нибудь.Просто убедитесь, что соль достаточно длинная.

Не используйте MD5 больше;это старое.См. http://en.wikipedia.org/wiki/MD5#Collision_vulnerabilities для получения дополнительной информации.

РЕДАКТИРОВАТЬ: Это односторонние алгоритмы хеширования.Вы можете и не должны иметь возможность расшифровать пароль.Если вы можете, то нет смысла использовать хеш для хранения паролей.

1 голос
/ 20 февраля 2011

Вы можете использовать md5 или лучшую технику хеширования, например, sha1. См. Хеширование пароля http://phpsec.org/articles/2005/password-hashing.html для более подробной информации.

1 голос
/ 20 февраля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...