Шифровать пароль перед сохранением в базе данных?

У меня есть пароль, который передается из приложения iPhone в базу данных через php-скрипт, user.php.

Переменная $ pass заполняется следующим:

$pass = str_replace("'", "", $_REQUEST['pass']); 

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

Спасибо всем.

Если вам не нужно получать фактическое значение пароля (из зашифрованного значения базы данных), вы можете запустить на нем алгоритм одностороннего хэша (например, sha1: http://php.net/manual/en/function. sha1.php ). Эта функция вернет определенную длину строки (хэш), которая не может быть использована для поиска исходной строки (теоретически). Возможно, что две разные строки могут создать один и тот же хэш (называемый столкновением), но это не должно быть проблемой с паролями.
Пример: $pass = sha1($_REQUEST['pass']);

Одна вещь, чтобы сделать ее более безопасной, – добавить соль в хэш и снова запустить функцию хэша. Это затрудняет создание хэша паролей со злым умыслом, поскольку значение соли обрабатывается только на стороне сервера.
Пример: $pass = sha1(sha1($_REQUEST['pass']).sha1("mySalt@ $# (%"));

Используйте библиотеку криптографии php. Md5 не шифрование, это хеширование.

Кроме того, соль ваши пароли. Зачем?

  • Этот ответ
  • Еще один хороший ответ

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

 $salt = md5(unique_id().mt_rand().microtime()); $pass = sha1($salt.$_REQUEST['pass']); 

и сохраните $ salt и $ pass в базе данных. Затем, когда они заходят в систему, вы просматриваете их строку и проверяете хэш:

 $user = query('SELECT * FROM `user` WHERE username = ?', array($_REQUEST['username'])); if($user) { // If the password they give maches if($user->pass === sha1($user->salt. $_REQUEST['pass'])) { // login } else { // bad password } } else { // user not found } 

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

Используйте склеп с солью. Такие как

 $user = strip_tags(substr($_REQUEST['user'],0,32)); $plain_pw = strip_tags(substr($_REQUEST['pass'],0,32)); $password = crypt(md5($plain_pw),md5($user)); 

как на http://www.ibm.com/developerworks/opensource/library/os-php-encrypt/

Самое основное: Хешируйте его MD5 или SHA1

 $newpass = md5($_REQUEST['pass']); 

или

 $newpass = sha1($_REQUEST['pass']); 

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

Вы можете «солить» хэши с дополнительными данными, поэтому, если они скомпрометированы, его ценность не может быть найдена (попробуйте использовать некоторые простые хешированные слова) .. т. md5("mySiteSalt!!" . $_REQUEST['pass']); строку сайта, чтобы изменить стандартный хеш, например md5("mySiteSalt!!" . $_REQUEST['pass']); или что-то более продвинутое.

Вы должны использовать SHA1 для хэширования ваших паролей для хранения в базе данных. Это самый простой, но наиболее эффективный способ хранения паролей:

 $password = sha1($password); 

Это также исключительно безопасно. Хотя его целостность начинает ползать, довольно легко обновить эту функцию до SHA-256 (что невероятно безопасно).

Чтобы узнать, почему md5, sha1 и их скоростные друзья могут не быть хорошей идеей, вы должны прочитать сообщение « Достаточно с таблицами Rainbow»: что вам нужно знать о схемах безопасного пароля Томаса Птачека. Суть:

Наконец, мы узнали, что если мы хотим безопасно хранить пароли, у нас есть три разумных варианта: схема MD5 PHK, схема Bcrypt Provos-Maziere и SRP. Мы узнали, что правильным выбором является Bcrypt.

Примечание: это PHK, а не php.