Какую функцию использовать для хеширования паролей в MySQL?

При импорте стандартного json-модуля достаточно изменить кодер FLOAT_REPR по умолчанию. На самом деле нет необходимости импортировать или создавать экземпляры Encoder.

import json
json.encoder.FLOAT_REPR = lambda o: format(o, '.2f')

json.dumps([23.67, 23.97, 23.87]) #returns  '[23.67, 23.97, 23.87]'

Иногда также очень полезно выводить как json лучшее представление, которое python может угадывать с помощью str. Это позволит убедиться, что значащие цифры не игнорируются.

import json
json.dumps([23.67, 23.9779, 23.87489])
# output is'[23.670000000000002, 23.977900000000002, 23.874890000000001]'

json.encoder.FLOAT_REPR = str
json.dumps([23.67, 23.9779, 23.87489])
# output is '[23.67, 23.9779, 23.87489]'
11
задан Matt 3 December 2008 в 00:17
поделиться

3 ответа

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

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

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

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

Далеко, намного больше детали здесь: http://www.codinghorror.com/blog/archives/000953.html

11
ответ дан 3 December 2019 в 08:06
поделиться

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

SHA1 также считают легче расколоться, чем предположение пароля грубой силой.

Я на самом деле внес патч к MySQL для обработки поверхности SHA224, SHA256, SHA384 и функций SHA512 от OpenSSL. Они рекомендуются NIST для хеширования пароля (на самом деле SHA256 и выше).

Мой патч был закончен к инженерам MySQL и включен в MySQL 6.0.5 и позже, если я вспоминаю.

При использовании более ранней версии MySQL (и кто не делает), то можно, вероятно, использовать реализацию сильных хеш-функций на базовом языке. PHP имеет hash() функция, например. Можно сделать хеширование в приложении и сохранить получающуюся строку сообщения к базе данных.

Не забывайте делать соление, также!

4
ответ дан 3 December 2019 в 08:06
поделиться

MD5 и SHA-1, вероятно, больше не рекомендуются должные знать нападения. Но, они все еще обычно достаточны для большинства вариантов использования.

При поиске большего количества опций просто используйте хеш-функции PHP - у Вас есть много опций там.

1
ответ дан 3 December 2019 в 08:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: