2 способа шифрования паролей? - PullRequest
2 голосов
/ 23 сентября 2010

Вопрос говорит сам за себя, должны ли пароли храниться с использованием 2-х стороннего шифрования или только 1-го способа?

Ответы [ 7 ]

9 голосов
/ 23 сентября 2010

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

Точка - это ... односторонний хеш. Редактировать: Согласно комментариям Стивенса.Следующий RFC 2898 охватывает некоторые важные методы хеширования.Это также способствует хорошему чтению.

3 голосов
/ 23 сентября 2010

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

Просто всегда сохраняйте хешированный пароль и затем сравнивайте хэшированный ввод с хешем в базе данных. На сегодняшний день это самый распространенный и наиболее безопасный метод базовой аутентификации.

2 голосов
/ 23 сентября 2010

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

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

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

1 голос
/ 23 сентября 2010

Растянуть и хешировать свои пароли. Если вам лень, просто наберите phpass , который используется Drupal и phpBB.

0 голосов
/ 23 сентября 2010

Теперь, если вы храните некоторые данные, которые вы передаете по сети, которые МОГУТ быть перехвачены, вы должны использовать Шифрование / дешифрование

Если вы говорите о полномочиях в поместье пароляпользователя, то хэширование - это путь.

По умолчанию, когда вы говорите Шифрование , вы мгновенно получаете и извлекаемую сторону Дешифрование , с хэшированиемне нужно извлекать значение скомпилированного текста, просто сравните его с другим хешем

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

Пример того, как вы должны хешировать в PHP, выглядит так:

Хэш

define('LOCAL_USER_SALT',£F$%^GH*&^%HG&*^%F&*(K(*');

Тогда этоХеш никогда не должен меняться, это то, что статический хеш и будет использоваться для тройного хеширования пароля, позвольте мне показать вам

class User
{
    //..
        function AddUserToDatabase($username,$password,$meta = array())
        {
            //Create a db salt
            $salt = md5(uniqid() . microtime() . $username . microtime(true));

            //Now we create a hashed version of the 
            $password = md5($password . $salt . LOCAL_USER_SALT);

            //Then you would insert the $salt and $hash to the DB
        }
    //..
}

После прочтения комментариев вы можете проверить так:

class User
{
    //..
        public function CheckCredentials($username,$pass)
        {
            //Get results from DB where $username is set in the column
            //lets say $db_row is the data from the sql query
            $check = md5($password . $db_row['salt'] . LOCAL_USER_SALT);
            if($password == $check)
            {
                //The user exists.
            }
        }
    //..
}

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

0 голосов
/ 23 сентября 2010

Хеширование - это случайная строка, шифрование запутывает строку, которая потенциально может быть расшифрована.

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

0 голосов
/ 23 сентября 2010

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

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