Что лучше использовать для шифрования пароля и имени пользователя: md5() или crypt()

iceman

говнокодер
Ekaterina
ты пришла узнать какой алгоритм использовать? так нахрена ты слушаешь своего админа?
 

Ekaterina

Новичок
Автор оригинала: iceman
Ekaterina
ты пришла узнать какой алгоритм использовать? так нахрена ты слушаешь своего админа?
1. Выражайтесь цензурно.
2. Полагаю, что выслушивать пожелания пользователей - это хороший тон. Я не разбираюсь в криптографии, поэтому сначала использовала md5() - функцию для хеширования пароля, особо не задумываясь над алгоритмом. Админ спросил, используется ли в ней при шифровании salt, и что лучше использовать алгоритм с salt. Я решила поискать еще, наткнулась на crypt(). Оказалось, что crypt() у меня в ОС поддерживает стандартное DES-шифрование с двухсимвольной salt и MD5-шифрование с 12-символьной salt. По какой-то загадочной причине стандартное DES-шифрование заменяется MD5-шифрование с 12-символьной salt, которое и используется функцией crypt() по умолчанию. в справке по этому поводу написано так:

In fact, sometimes the standard DES-based encryption is replaced by an MD5-based encryption algorithm.
. Почему так происходит - не написано.
Таким образом, выбор между функциями свелся к выбору алгоритма хеширования, который они используют. Так как на форуме мне подсказали как использовать соль с md5(), и функция crypt() также использует этот алгоритм. То я остановилась на использовании md5($password . $salt). Все счастливы.
 

Crys

Двинутый новичок
привязываться можно не только к id, но и к дате регистрации, например
Дата более уникальная, чем уникальный идентификатор пользователя? о_О
 

Alexandre

PHPПенсионер
Админ спросил, используется ли в ней при шифровании salt, и что лучше использовать алгоритм с salt.
как раз здесь админ был прав

DES-шифрование - это двухстороннее шифрование
MD5 - это хеширование, шифрование в одну сторону, расшифровать нельзя.
сравнивается не данные а их хеши.

при md5 - соль исполльзовать необходимо
$salt="xyz.,#" - всякая бесмыслица
первая сессия:
md5($data+$salt) -> запоминаем
последующие сессии
извлекаем хеши и cравниваем с md5($data+$salt)

есть еще алгоритм хеширования sha-1
разница md5 и sha-1 в длинне хешей (32 и 40 символов)
 

korchasa

LIMB infected
Автор оригинала: Crys
Дата более уникальная, чем уникальный идентификатор пользователя? о_О
Разве Тхамба не мать Дадрапешты?

ЗЫ Я тоже умею читать, что мне надо, а не что написано ;)
 

Ekaterina

Новичок
Автор оригинала: Alexandre
как раз здесь админ был прав

DES-шифрование - это двухстороннее шифрование
MD5 - это хеширование, шифрование в одну сторону, расшифровать нельзя.
сравнивается не данные а их хеши.
Это я понимаю.

при md5 - соль исполльзовать необходимо
$salt="xyz.,#" - всякая бесмыслица
первая сессия:
md5($data+$salt) -> запоминаем
последующие сессии
извлекаем хеши и cравниваем с md5($data+$salt)
Я так и сделала.


Alexandre , спасибо за подробный ответ. Правда я все равно не понимаю, каким образом выбирается алгоритм для хеширования. Еcли у меня доступно два алгоритма, почему выбран именно md5. В справке написано, что crypt() выполняет одностороннее шифрование, но как при этом она может поддерживать двусторонний алгоритм, то есть DES?
И еще вопрос: возникла необходимость шифрования путей подключения некоторых сторонних файлов, которые буду также хранится в текстовом виде. Для этого использовать функции библиотеки mcrypt(), так как необходимо двустороннее шифрование?
 
Сверху