Intereting Posts
Динамический выпадающий список для разных стран, штатов, географических местоположений? fgetcsv () катит символы с диакритикой (т.е. не-ASCII) – как исправить? PHP: количество последовательных элементов в массиве PHP / MySQL. выбор 2 общих полей в 2 таблицах php-переменная в html нет другого пути: <? php echo $ var; ?> Как показать последние уведомления в jQuery / php / mySQL? Обновить Использование Office Word для чтения файлов doc с помощью PHP каталог не создается при запуске сценария оболочки bash в php Как я могу использовать такое утверждение в smarty? Подсчитайте строку, содержащую слово «118-bonsplans.com» в csv-файле, используя php Как изменить язык без перегрузки страницы с помощью PHP / JQuery как сохранить значение во второй переменной внутри выпадающего списка Преобразовать анализируемый текст, с php, в utf-8 Отображение значения строки базы данных в функции javascript в PHP suds.TypeNotFound: Тип не найден: 'MerchantCode'

Альтернатива Md5 в PHP?

Какая лучшая альтернатива алгоритму Md5 для PHP для шифрования данных пользователя, таких как пароли и другие безопасные данные, хранящиеся в базах данных MySQL?

SHA512 – не страшный выбор. Но это будет незадолго до того, как оно будет разбито на большинство длин паролей. Возьмите совет Джеффа . Используйте bcrypt или PBKDF2 . Они устойчивы к EC2 или другим методам параллельной обработки. Вероятно, не иммунитет, но устойчив.

Причина в том, что лучший хеш не лучше в этом случае, ABC в MD5 становится одним значением, а ABC в SHA512 становится одним значением. Вычисление всех трехбуквенных паролей для SHA512 на самом деле проще, чем для MD5 . Ключ должен быть сложным. Это означает медленный хэш, который использует много ОЗУ и / или тот, который нелегко сделать на EC2.

Лучший выбор – НЕ использовать пароли в одиночку. Решите, если логин действительно необходим для вашего сайта, и если да, попробуйте сначала использовать стороннего поставщика. Если это не вариант, используйте пароль + токен из RSA. Используйте только один пароль, если у вас нет других жизнеспособных вариантов.

При хешировании пароля ключ используется для хэша (пароль + соль), а соль должна быть уникальной для каждого пользователя, и ее также трудно или невозможно угадать. Использование имени пользователя отвечает первым критериям и лучше, чем соль или соль для каждого пользователя, но уникальная случайная соль для каждого пользователя – лучший выбор . Идеально в отдельной базе данных, если не в месте, со своими учетными данными. Его также следует указывать не на имя пользователя, а на user_id или даже на хэш пользователя user_id. Вы хотите, чтобы эта база данных была доказана SQL-инъекцией. Хороший способ сделать это не допускает прием от пользователя, который не хеширован. И вам было бы разумно позволить самому запросу делать хэширование. Медленный? Да, и это тоже хорошо.

Сама соль должна содержать все трудные для прогнозирования данных, которые она может получить. Username + User Id + Timestamp + мусор из dev / urandom + последний твит со словом taco в нем. Дольше, тем лучше. SHA512 – хороший выбор хеша здесь.

Реферат: hash = bcrypt (пароль + соль), salt = sha512 (имя пользователя + user_id + отметка времени + microtimestamp + dev / urandom bits + другой шум).

Если вы все еще беспокоитесь после всего этого. Не стесняйтесь SHA512 зашифрованный пароль. Вы получите силу SHA512, которая при трещине обнаруживает гораздо сложнее грубой силы bcrypted hash.

Попробуйте функцию php hash () http://php.net/manual/en/book.hash.php

Пример кода:

 $hash = hash('SHA512', $pass); 

Это делает следующее:

 SHA512("The quick brown fox jumps over the lazy dog") 

В:

 0x07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6 

Дальнейшее чтение: http://en.wikipedia.org/wiki/SHA-2

MD5 действительно больше не рекомендуется. Большинство установок php включают расширение hash . В настоящее время лучшим вариантом для хэш-функции будет SHA-512. Вы можете использовать SHA-512 со следующей функцией:

 <?php function sha512($string) { return hash('sha512', $string); } ?> 

Существуют и другие альтернативы с меньшими размерами выходных данных, например, SHA-256 или RIPEMD-160 .

Обновление: прочитав обновленный вопрос, я предлагаю функцию php crypt .

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

 hash('sha256', $data); 

MCrypt предоставляет множество более безопасных методов (а также сам md5, кстати).

Я рекомендую прочитать информацию о хэш- функции. Вы могли бы прочитать и про McClip . На данный момент это лучшая хэш-вещь. Mcrypt обеспечивает хеширование на основе цикла процессора.