2014-09-24 4 views
1

Были разговоры о том, что md5 (md5) лучше, чем md5, но некоторые говорят, что он ничего не делает, может кто-то помочь в том, как сделать это более защищенным? Меня так смущает смешанная обратная связь.хеширование PHP MD5 (MD5)

$query="INSERT INTO `users` (`email`, `password`) 
    VALUES('".mysqli_real_escape_string($link, $_POST['email'])."', 
      '".md5(md5($_POST['email']).$_POST['password'])."' 
     )"; 
+4

Вы не должны использовать md5 для хранения паролей. Вместо этого используйте bcrypt. – Afsa

+1

Энтропия единственного md5() хэша - 256 возможных комбинаций бит на каждый байт данных; энтропия, когда вы md5() второй раз ограничивается кодировкой первого хэша, то есть 26 буквенно-цифровых + 10 цифр на байт, поэтому хеширование более одного раза увеличивает вероятность столкновений, уменьшая энтропию –

+0

Некоторые люди говорят, что md5 (md5 бесполезен в этом коде ... это правда? Если это так, есть ли способ сделать эту строку кода более безопасной? – Anthony

ответ

1

MD5 будет производить 32-значный хэши дважды хэширования что-то все равно будет иметь 32-символьный хэш, так просто не двойной md5 ничего! Если вы хотите использовать более длинные хэши (позвоните более безопасно), вы должны использовать что-то вроде sha512, whirlpool и т. Д. См. hash() function в документации по php для примеров.

поэтому вместо md5 (md5 ($ переменного)) вы должны использовать хэш ('SHA512', переменные $)

Также обратите внимание, что более длинные хэш означают больше времени обработки (= больше CPU!)

+3

Длина хэша на самом деле не случай более длинного более безопасного –

3

Не используйте хеширование md5 для хранения паролей. Вместо этого используйте функцию password_hash вместе с bcrypt. См: http://php.net/manual/de/function.password-hash.php

password_hash($password, PASSWORD_BCRYPT, array('cost' => 13)); 

Для более старых версий PHP взглянуть на https://github.com/ircmaxell/password_compat

+0

+1. Как я уже сказал, если вы используете 'PHP> = 5.5', я настоятельно рекомендую использовать' password_hash' тоже. «Md5» неэффективен с давних пор. – Debflav

0

MD5 является небезопасным для текста больше ден 512 бит или 64 байта, потому что найти математическую группу в ист. то, что вы делаете, это хэш хэш. Хэш короче 64 бит. Итак, у вас есть обходной путь. Если это безопасно ... я не дам мне на это руку. Вы найдете более под Wiki Хорошо, лучший способ не использовать MD5.

+0

Марк Бейкер в ссылке Wiki вы найдете ссылку на документ над тормозом MD5, там вы найдете функцию MD5 там, где вы найдете длину строки блоков кодирования MD5. А также длина 512 бит. ЕСЛИ это видели в живой демо CCC 2009 –

+0

Я не могу найти эту ссылку вообще; да, размер блока кодирования для MD5 составляет 512 бит, но я не могу найти что-либо на любой из связанных страниц, в которых говорится, что вы предлагаете. Проблемы с столкновением могут возникать, если для двух значений, хэшированных, задано общее префиксное значение 128-байтового блока данных, выровненное на 64-байтной границе. –

+0

Да, вы правы, вам нужна минимальная длина 4 блоков кодирования. Длина блока кодирования = 512 бит -> 64 байт Итак, вы «безопасны», если используете только один блок.OK? –

Смежные вопросы