2015-05-27 6 views
-1

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

+0

По кодированию, что вы пробовали? – dnuka

+2

Первый шаг, узнать разницу между шифрованием и хешированием. Ответ: scrypt или bcrypt. – SLaks

+0

Это приложение JavaEE. Это алгоритм SHA256, который я использую http://www.mkyong.com/java/java-sha-hashing-example/, но я хочу знать лучшие варианты. – jose

ответ

1

Вы никогда не должны хранить пароль, даже если он зашифрован. Потому что что-то зашифрованное может быть дешифровано, поэтому злоумышленник может сделать то же самое. Google для «хэширования» и «соления», возможно, у OWASP есть рекомендации, как это сделать должным образом. Я считаю, что хранение зашифрованных паролей будет в списке уязвимостей.

+0

@ Adelphia Хотя я чувствую себя немного шантажированным, я может ответить вам на этот вопрос: вы не храните пароль в «четком тексте», вы просто храните его хэш, который вычисляется с помощью умного алгоритма, который не является обратимым. Короче говоря: если вы сохраняете пароль в файле, злоумышленник может захватить этот файл, а затем он знает ваш пароль. Если вы храните хэш (это всего лишь количество шестнадцатеричных значений, таких как «2a73f5b8b625a600c180ea44fe04e8c2dec52311», он мало выиграл. Когда пользователь вводит пароль в вашем приложении, вы просто вычисляете хеш и сравниваете его с сохраненным значением. – Marged

+0

@ Adelphia I 'm still waiting ;-) – Marged

+0

I misubderstood :) –

-2

Я написал 2 функции для обработки паролей. Первый принимает строку (т. Е. Ваш пароль) и возвращает хеш-залив. Он принимает хеш MD5 времени и добавляет его в строку. Затем он принимает хэш SHA256 этой строки. Затем он добавляет исходный хеш MD5 в хэш SHA256. Функция возвращает эту 96-символьную строку. Вторая функция принимает 2 строки в качестве этих аргументов (проверяется пароль и хеш пароля, с которым вы его протестировали) и возвращает логическое значение. Это PHP, но логика, конечно, переносима.

function hash_password($password){ 
    $md5 = strtoupper(hash('md5', time())); 
    $hash = $md5 . strtoupper(hash('sha256', $md5 . $password)); 
    return $hash; 
    } 

function test_password($password, $hash){ 
    $md5 = substr($hash, 0, 32); 
    $sha256 = substr($hash, 32); 

    if($sha256 == strtoupper(hash('sha256', $md5 . $password))) 
     return true; 
    else 
     return false; 
    } 
+1

Это решаемая проблема. Вы не должны писать свои собственные! –

+1

PHP имеет встроенную функциональность: [password_hash] (http://php.net/manual/en/function.password-hash.php). –

+0

SHA- * ** не подходит для хэш-паролей, потому что это слишком быстро и поэтому может быть слишком грубым. Вместо этого мы используем медленную хеш-функцию с коэффициентом затрат, таким как BCrypt или PBKDF2. Password_hash() был написан точно, чтобы избежать такого кода с MD5 и SHA- *. – martinstoeckli

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