2012-04-12 3 views
7

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

+1

md5 взломан, используется sha1 –

+1

водоворот работает хорошо. Вы должны сказать, что вы с ним делаете. – Brad

+3

Зависит от того, для чего вы собираетесь его использовать. Для хэширования для проверки дубликатов MD5 превосходно! –

ответ

13

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

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

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

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

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

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

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

0

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

+0

Да, но вы не обсуждаете, какие из них более безопасны и почему. – DampeS8N

-1

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

1

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

hash('sha256', $data); 
3

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

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

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

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

+0

False. sha384 более безопасен: http://en.wikipedia.org/wiki/SHA_hash_functions –

+1

Более безопасный, чем 'SHA-256', да. Более безопасный, чем 'SHA-512', нет. Где вы это читали? –

8

Попробуйте PHP хэш-функции() 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

+0

[SHA512 - неплохой выбор, но не лучший выбор.] (Http://www.codinghorror.com/blog/2012/04/speed-hashing.html) – DampeS8N

+0

Я должен не согласиться. – CodeTalk

+6

Заботьтесь о том, почему вы не согласны? – DampeS8N