Тема, конечно избитая, но хотелось бы обсудить перед новым проектом. Собственно, знаменитый md5 в чистом виде уже давно не катит. Вопрос в том, как каждый извращается? Собственная "надстройка" над md5? Другая функция? Или как? Ещё вопрос. На сколько я понимаю, md5 изначально использовалась для хеширования, а не шифрования паролей, так? Или я чёт не понимаю? Ещё я где то слышал, что в алгоритме есть баги и хеш всё-таки может повторяться. А кто, что использует для хеша в таблицах БД? Вообще, я так понимаю, выборка по хешу не такая уж и эффективная. Он всё-таки буквенный.
почему? оно и сейчас так используется. оно никогда небыло шифрующей функцией, это хеш. коллизии есть, безусловно. шанс примерно 2^128 (да, это может случиться как через две секунды, так и через пару десятков лет). если необходим некий уникальный id, не зависимый от контента - можно заюзать GUID.
Danilka Любая хеширующая функция, даже самая супер-пупер-современная и навороченная, может "повторяться". Это заключено в самой природе хеша: он переводит бесконечное множество комбинаций в конечное (2^длина_хеша_в_битах). Раз большее переводится в меньшее, значит, коллизии неизбежны.
Использую разные, в зависимости от ситуации. Для паролей как правило использую MySQL'овскую PASSWORD, на уровне PHP как правило MD5. Если нужна повышенная устойчивость - есть SHA, вплоть до 512 байт (MD5 всего 32 байта)
Не, все же, я хочу увидеть два разных набора байт, для которых md5-хэш будет одинаков. ЗЫ. Не подскажете табличку HEX-кодов для латинских символов?
Глупо шифровать пароли. Все что зашифрованно расшифровывается. Если вас поломают - у злоумышлиника будут пароли. Согласитесь, хеши более бесполезней паролей. MD5 давно сломали как и SHA-1. Сломали означает что за достаточно короткое время к хешу подбирают строку. Самый простой способ поднять защиту - "подсолить" - сгенерировать свою строку и добавлять ее перед хешированием.
Самый простой способ это не допускать дыр, а если кто-то добрался до хешей паролей то чаще всего он добрался (по крайней мере на моей практике) и до того что эти пароли открывают, и "расшифровка" хешей уже не имеет смысла, и если и делается то только ради шутки. (я как-то одному модератору в личку его пароль скинул, он долго злился, даже угрожал баном, но админы заступились так как я помог им заделать дыры при которых и без разшифровки пароля можно было весь сайт "уложить")
Vladson Не допускать дыр нужно однозначно, но мы человеки обыкновенные. Просрать все пароли открытим текстом и просрать все пароли в виде хешей - вещи разные. Во втором случае уйдет на порядок больше времени чтобы добыть все пароли, за это время можно хотя бы известить юзверей. Danilka подмешивание своей строки перед хешированием дает минимум 3 плюса: 1. исключает словари хешей, ибо хеши становятся другие. 2. исключает злоумышлиников-ламеров использующих готовые системы для подбора хешей - подобрав строку таким образом он не сможет ей воспользоватся в вашей системе - после подмешивания строки хеш будет другой, да и оригинальные пароли он не получит 3. скорее всего злоумышлинику-профи потребуется ваша подмешиваемая строка и алгоритм подмешивания, а получить хеши и алгоритм это не всегда одно и тоже Используйте разную строку в разных местах, генерируйте ее случайным образом.
Мне понадобилось 30 секунд брутфорса чтоб узнать пароли 80% простых юзверей (10% из которых был "123456" и 5% "123" и "qwerty") в зависимости от целей этого может оказаться более чем достаточно, есть даже шансы нарваться на пароли админов и модераторов... В зависимости от реализации движка (например как это было в ранних версиях рнрВВ) расшифровка даже не нужна, можно авторизироваться имея только хеш, и вот это куда опаснее чем использование md5 вместо того-же sha к примеру. Я не говорю что надо хранить пароли открыто, я говорю что нет смысла ставить бронированные ворота если вокруг нет забора. Всё должно быть сбалансировано...