![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 2 Всего: 19 |
В общем понимаю, что наверное вопрос не совсем в эту ветку, но в принципе в эту наверное, т.к. пишу на делфи...
У меня стоит задача подсчитать контрольную сумму строки алгоритмом CRC32B. Я нашёл HashLib в которой заявлена поддержка указанного алгоритма, но!, внимание - результат неверен! С чего решил - да очень просто, люди которым делаю чейчас считают его каким-то кривым образом, используя для этого веб-сервис, при этом результат верен у них, потому что проходится проверка(реализуется проверка не заказчиками, а третьей стороной, куда и отправляется строка с контрольной суммой). Внимание вопрос: может кто знает уже нормальный готовый алгоритм CRC32B или ткнёт меня носом в понятное описание алгоритма? P.S. у меня задача реализовать это всё на делфе. P.P.S. для одного символа я научился считать(меняется одна строчка в исходниках HashLib), а вот для двух и более символов алгоритм вообще не работает(экспериментировал пока только с английскими символами, потому что их контрольная сумма не зависит от кодировки) -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." ![]() ![]() ![]() |
|||
|
||||
Ne1tr1n0 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 1.3.2009 Репутация: 6 Всего: 8 |
А что за веб-сервис проверяет чексумму? Может самому использовать его для проверки?
Вот исходник на асме, попробуй, правильно он считает или нет? Быть может сделать объектник или либу на асме и прилинковать её статически к проекту на дельфи? http://tuts4you.com/download.php?view.550 Вот ещё исходник на сях, http://read.pudn.com/downloads91/sourcecod...0Nelson.c__.htm Ещё вроде как краем уха слышал, что тотал коммандер может считать CRC-32b. |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Проблема я так понимаю не в том, что человек не может запрограммировать или проверить. А в том, что нет описания того, что надо запрограммировать. По-моему единственный вариант сохранить свое время и нервы - это запросить описание того, что им надо считать, и сделать.
Про CRC есть описание в книге Вернер "Основвы кодирования". Правда кратко в конце главы про циклическое кодирование. Поэтому чтобы все понять, тебе надо будет прочитать всю эту главу. За день это сделать реально. Там же приводится порождающий многочлен для CRC-32. А вот что такое CRC-32B я не в курсе. В книге об этом ничего нет. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Qu1nt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: 18 Всего: 50 |
||||
|
||||
DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 2 Всего: 19 |
Конешно спасибо, но гулить я тоже умею, о разновидностях CRC32 пока не сталкнулся с этой проблемой даже особо и не знал и если честно даже заморачиваться бы не стал...
Веб-сервис, да любой, вот первый пример который я нашёл http://tools.adw0rd.ru/gethash/, а так гугл дал ещё добрый десяток вариантов. Использовать весервис - это извините изврат, у заказчиков 0.75 программиста и поэтому они юзают кривейший способ, а я то мегахадкорный программист, так что трудности мне нипочём ![]() Я кажется понял в чём проблема HashLib, она состоит в том что я невнимательно почитал примеры и проблема состоит в том что у меня коды символов которые ожидаются алгоритмом не совпадают с тем которые я алгоритму даю... что за беда, я даже не знаю... Там в примерах и в библиотеках есть простенький самотест на котором всё валится - там задаётся строка и ожидается получение "правильной" контрольной суммы, а у меня считается она неверно, в результате чего примеры не работают, точнее если отключить самотестирование, то всё работает, но к сожалению результат неверен... -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." ![]() ![]() ![]() |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Вы уверены что примеры ждут именно такой тип строки, который вы используете? -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
DarkProg |
|
||||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 2 Всего: 19 |
Вот копипаст функции которая используется внутри для самотестирования
Т.е. обычные строки, или по другому AnsiString Я пробовал играться с UTF8, Unicode но эффект один - никакой. Интересен тот факт что зачем-то разработчики алгоритма выболняют операцию bswap для результата.... хотя если её отключить, то результат который получен при помощи веб-сервиса совпадёт с ожидаемым, но у меня вообще отличный результат и операция bswap тут явно не при чём. -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." ![]() ![]() ![]() |
||||
|
|||||
Qu1nt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: 18 Всего: 50 |
DarkProg, там вообще-то есть реализация CRC32B на C.
Путем нехитрого перевода на Delphi получаем:
Результат такой же как и на http://tools.adw0rd.ru/gethash/. |
|||
|
||||
DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 2 Всего: 19 |
Видел, и как раз занимался сейчас её переводом... но спасибо +1 от меня(я битовые операции долго обычно мучаю), за помощь, надеюсь всё будет так как именно надо заказчику. -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." ![]() ![]() ![]() |
|||
|
||||
DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 2 Всего: 19 |
Эмм... у меня тут есть небольшая проблема... похоже что считать контрольную сумму надо в WIN1251... и почему-то результат не совпадает... я себе мозг сломал... пробовал в лоб понять что за ерунда(тупой перебор от 0 до 255 и вычисление контрольной суммы), но не получилось что-то
Дополнил выше приведенную функцию вот так
Судя во результату в Byte, то всё работает верно, но почему-то web-интерфейс даёт абсолютно иное значение, я даже не знаю чему верить.... -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." ![]() ![]() ![]() |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Очевидно же. Надо разобраться откуда веб-интерфейс берёт значение. И если оттуда, то не происходит ли по пути конвертация. Например в base64.
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Qu1nt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: 18 Всего: 50 |
Стоп. У меня результаты были идентичные с http://tools.adw0rd.ru/gethash/. О каком веб-интерфейсе речь?
|
|||
|
||||
DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 2 Всего: 19 |
У меня тоже, если речь идёт о UTF8, но если WIN-1251, то результаты отличаются как земля и небо... Зная, что win1251 кодируется одним байтом, то я сделал тупой вариант перебора чисел от 0 до 255, и попытался сравнить с контрольной суммой буквы Б посчитанной в веб интерфейсе, в результате ни одно из посчитанных значений не совпало с тем что предлагает эта веб-страничка. -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." ![]() ![]() ![]() |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Из названия CRC32 следует, что ему нужно минимум 32 бита - т.е. 4 байта. Один байт - ваша буква. А вот остальные как-то заполняются. Возможно у вас и в алгоритме с сайта они заполняются по-разному.
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 2 Всего: 19 |
Вообще как бы независимо от реализации результат должен быть одним, но видимо не судьба...
-------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." ![]() ![]() ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |