Вообщем возник вопрос из-за разных кодировок такого плана. Как известно хэш вычисляется от сообщения, т.е на вход подаётся набор байт на самом деле а не набор символов... Допустим мы имеем текст пароль он в кодировке 1251 занимает 6 байт. Вычисляем MD5 хэш, получаем: 749789e4982b0c563f6729aac100a614 Далее мы имеем этот же текст пароль в кодировке UTF8, он уже займёт 12 байт пароль - показано как он выглядит в CP1251 Вычисленный хэш e242f36f4f95f12966da8fa2efd59992 Как видим хэши разные (ну это так и должно быть потому как разные байты и разное их количество) а вот пароль-то один "пароль" Вопрос такой: от чего будет вычисляться в PHP5 MD5 хэш если на вход подаётся пасс в кириллице в кодировке UTF8? от 12-ти? Либо перед вычисление произойдёт преобразование из UTF8 в CP1251 ? и будет посчитан хэш уже от 6 байтов?
Да что ты говоришь? Code: Функция md5 в PHP — Возвращает MD5 хэш строки Синтаксис string md5 (string str [, bool raw_output]) Я знаю как работает функция и даже знаю что такое "так называемые бинарные данные " Мне нужен ответ на мой вопрос! Ты вообще его понял? PHP: <?php $str = 'apple'; if (md5($str) === '1f3870be274f6c49b3e31a0c6728957f') { echo "Would you like a green or red apple?"; exit; } ?> Ты мне хочешь сказать, что результат не будет зависеть от того как кодирована переменная $str?
Насколько я знаю, может и ошибаюсь, перед тем как выполняеться md5($string), $string->utf8 переводиться автоматом.
Вы уверены что так? Вычислите для проверки хэши от числа в HEX для UTF8 и CP1251, интересно всё же что подаётся на вход байты от 1251 или от UTF8 И БЕРИТЕ КИРИЛИЦУ! а не латиницу! Вот так: $STR="Опля!" P.S. Тоже мне, сравнили лысую овцу с не постриженной... конечно хэш будет один, потому как в латинице строка в UTF8 та же самая что и в CP1251 PHP: <?php $str = 'Опля!'; echo 'CP-1251: '.md5($str)."\n"; echo 'UTF-8: '.md5(iconv('windows-1251','utf-8',$str)); ?> - проверьте это... Ну и... Code: CP-1251: 332bad7fc1f78b3558316280addda510 UTF-8: cd025bd5b1f060a279e5785b490e05d0 Так что думайте сами... иметь или не иметь... Бля, в досовской походу набил по русски, вот правильно: Code: CP-1251: 53eb707315810a6b5093bc9a79e0fbfe UTF-8: 42b2e98b197fd516ef29530fb37ee03f Смотрим, что даёт PasswordsPro на Опля! 53eb707315810a6b5093bc9a79e0fbfe Что даёт хэшкрэкинг? 53eb707315810a6b5093bc9a79e0fbfe Что passcracking.com? - чёт не отвечает... insidepro.com? - К сожелению не поддерживает...
Смотрите сами, и потом не говорите что не знали! PHP: <?php $str = 'Опля!'; $CP1251HEX=bin2hex($str); $UTF8HEX=bin2hex(iconv('windows-1251','utf-8',$str)); echo 'CP-1251: '.md5($str)."<br>"; echo 'CP-1251 (hex): '.md5(pack("H*", $CP1251HEX))."<br>"; echo 'UTF-8: '.md5(iconv('windows-1251','utf-8',$str))."<br>"; echo 'UTF-8 (hex): '.md5(pack("H*", $UTF8HEX))."<br>"; echo "БИНАРНЫЕ ДАННЫЕ <b>".$CP1251HEX."</b> И <b>".$UTF8HEX."</b> НЕ РАВНЫ ДЛЯ СТРОК КИРИЛЛИЦЫ В РАЗНЫХ КОДИРОВКАХ, ПОЭТОМУ И ХЭШИ РАЗНЫЕ!<br>"; echo 'Нихрена ничего не преобразовывается на автомате (кроме латиницы, потому как коды просто совпадают)!<br>'; echo 'Тайна нерасшифровывающихся хэшей раскрыта! походу это пассы в национальных UT8 с кодировкой в два байта!<br>Вообщем PasswordsPro курит в сторонке, потому как 5-значный пароль достаточно стойкий в нац. символах в кодировке UTF8!<br>'; echo iconv('utf-8','windows-1251', 'Нерезус Рё Гриинбир ЛАМО!'); ?>
ничего не говорит вышестоящий мой пост?) p.s. echo iconv('utf-8','windows-1251', 'Нерезус Рё Гриинбир ЛАМО!'); зачетная строчка...)
Угу, как лодочку настроишь, так она и поплывёт... P.S. Придётся заложить ещё брут нац. символов (кириллица) в кодировке UTF8 в новом движке сервиса - ведь неизвестно как настроен php на конкретном взятом сайте!... соответсвенно хэши могут быть вычисленны от паролей как я описал в примерах выше...