Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсчёт CRC32B 
V
    Опции темы
DarkProg
Дата 2.4.2012, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



В общем понимаю, что наверное вопрос не совсем в эту ветку, но в принципе в эту наверное, т.к. пишу на делфи...

У меня стоит задача подсчитать контрольную сумму строки алгоритмом CRC32B.

Я нашёл HashLib в которой заявлена поддержка указанного алгоритма, но!, внимание - результат неверен!
С чего решил - да очень просто, люди которым делаю чейчас считают его каким-то кривым образом, используя для этого веб-сервис, при этом результат верен у них, потому что проходится проверка(реализуется проверка не заказчиками, а третьей стороной, куда и отправляется строка с контрольной суммой).

Внимание вопрос: может кто знает уже нормальный готовый алгоритм CRC32B или ткнёт меня носом в понятное описание алгоритма?

P.S. у меня задача реализовать это всё на делфе.
P.P.S. для одного символа я научился считать(меняется одна строчка в исходниках HashLib), а вот для двух и более символов алгоритм вообще не работает(экспериментировал пока только с английскими символами, потому что их контрольная сумма не зависит от кодировки)


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Ne1tr1n0
Дата 2.4.2012, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 1.3.2009

Репутация: 6
Всего: 8



А что за веб-сервис проверяет чексумму? Может самому использовать его для проверки?
Вот исходник на асме, попробуй, правильно он считает или нет? Быть может сделать объектник или либу на асме и прилинковать её статически к проекту на дельфи?
http://tuts4you.com/download.php?view.550
Вот ещё исходник на сях, http://read.pudn.com/downloads91/sourcecod...0Nelson.c__.htm
Ещё вроде как краем уха слышал, что тотал коммандер может считать CRC-32b.
PM MAIL   Вверх
ksili
Дата 2.4.2012, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



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

Про CRC есть описание в книге Вернер "Основвы кодирования". Правда кратко в конце главы про циклическое кодирование. Поэтому чтобы все понять, тебе надо будет прочитать всю эту главу. За день это сделать реально. Там же приводится порождающий многочлен для CRC-32. А вот что такое CRC-32B я не в курсе. В книге об этом ничего нет.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Qu1nt
Дата 2.4.2012, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 18
Всего: 50



PM MAIL   Вверх
DarkProg
Дата 2.4.2012, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Конешно спасибо, но гулить я тоже умею, о разновидностях CRC32 пока не сталкнулся с этой проблемой даже особо и не знал и если честно даже заморачиваться бы не стал... 
Веб-сервис, да любой, вот первый пример который я нашёл http://tools.adw0rd.ru/gethash/, а так гугл дал ещё добрый десяток вариантов. Использовать весервис - это извините изврат, у заказчиков 0.75 программиста и поэтому они юзают кривейший способ, а я то мегахадкорный программист, так что трудности мне нипочём smile Главное понять что искать...

Я кажется понял в чём проблема HashLib, она состоит в том что я невнимательно почитал примеры и проблема состоит в том что у меня коды символов которые ожидаются алгоритмом не совпадают с тем которые я алгоритму даю... что за беда, я даже не знаю... Там в примерах и в библиотеках есть простенький самотест на котором всё валится - там задаётся строка и ожидается получение "правильной" контрольной суммы, а у меня считается она неверно, в результате чего примеры не работают, точнее если отключить самотестирование, то всё работает, но к сожалению результат неверен...


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
northener
Дата 2.4.2012, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(DarkProg @  2.4.2012,  19:11 Найти цитируемый пост)
Там в примерах и в библиотеках есть простенький самотест на котором всё валится - там задаётся строка и ожидается получение "правильной" контрольной суммы, а у меня считается она неверно, в результате чего примеры не работают, 

Вы уверены что примеры ждут именно такой тип строки, который вы используете?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
DarkProg
Дата 2.4.2012, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Цитата(northener @  2.4.2012,  20:23 Найти цитируемый пост)
Вы уверены что примеры ждут именно такой тип строки, который вы используете? 

Вот копипаст функции которая используется внутри для самотестирования

Код

    HASH_CRC32B: ret := SingleTest(HashType, 'checksum', '9adf6fde'); 

Т.е. обычные строки, или по другому AnsiString
Я пробовал играться с UTF8, Unicode но эффект один - никакой.

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


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Qu1nt
Дата 2.4.2012, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 18
Всего: 50



DarkProg, там вообще-то есть реализация CRC32B на C.
Путем нехитрого перевода на Delphi получаем:
Код

function Crc32B(const Text: String): Cardinal;
var
  Byte, Mask, I: Cardinal;
begin
  Result := Cardinal(-1);
  for Byte in TEncoding.UTF8.GetBytes(Text) do
  begin
    Result := Result xor Byte;
    for I := 7 downto 0 do
    begin
      Mask := -(Result and 1);
      Result := (Result shr 1) xor (Mask and $EDB88320);
    end;
  end;

  Result := not Result;
end;

Результат такой же как и на http://tools.adw0rd.ru/gethash/.
PM MAIL   Вверх
DarkProg
Дата 2.4.2012, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Цитата(Qu1nt @  2.4.2012,  21:53 Найти цитируемый пост)
DarkProg, там вообще-то есть реализация CRC32B на C.

Видел, и как раз занимался сейчас её переводом... но спасибо +1 от меня(я битовые операции долго обычно мучаю), за помощь, надеюсь всё будет так как именно надо заказчику.


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
DarkProg
Дата 8.4.2012, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Эмм... у меня тут есть небольшая проблема... похоже что считать контрольную сумму надо в WIN1251... и почему-то результат не совпадает... я себе мозг сломал... пробовал в лоб понять что за ерунда(тупой перебор от 0 до 255 и вычисление контрольной суммы), но не получилось что-то

Дополнил выше приведенную функцию вот так

Код

  Win1251:TEncoding;
begin
  ...
  Win1251:=TEncoding.GetEncoding(1251);
  for Byte in Win1251.GetBytes(Text) do
  ...


Судя во результату в Byte, то всё работает верно, но почему-то web-интерфейс даёт абсолютно иное значение, я даже не знаю чему верить....


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
ksili
Дата 9.4.2012, 06:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Очевидно же. Надо разобраться откуда веб-интерфейс берёт значение. И если оттуда, то не происходит ли по пути конвертация. Например в base64.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Qu1nt
Дата 9.4.2012, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 18
Всего: 50



Стоп. У меня результаты были идентичные с http://tools.adw0rd.ru/gethash/. О каком веб-интерфейсе речь?
PM MAIL   Вверх
DarkProg
Дата 9.4.2012, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Цитата(Qu1nt @  9.4.2012,  09:44 Найти цитируемый пост)
Стоп. У меня результаты были идентичные с http://tools.adw0rd.ru/gethash/. О каком веб-интерфейсе речь? 

У меня тоже,  если речь идёт о UTF8, но если WIN-1251, то результаты отличаются как земля и небо...
Зная, что win1251 кодируется одним байтом, то я сделал тупой вариант перебора чисел от 0 до 255, и попытался сравнить с контрольной суммой буквы Б посчитанной в веб интерфейсе, в результате ни одно из посчитанных значений не совпало с тем что предлагает эта веб-страничка.


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
ksili
Дата 9.4.2012, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Из названия CRC32 следует, что ему нужно минимум 32 бита - т.е. 4 байта. Один байт - ваша буква. А вот остальные как-то заполняются. Возможно у вас и в алгоритме с сайта они заполняются по-разному.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
DarkProg
Дата 9.4.2012, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Вообще как бы независимо от реализации результат должен быть одним, но видимо не судьба...


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
DarkProg
Дата 9.4.2012, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Цитата(ksili @  9.4.2012,  14:09 Найти цитируемый пост)
 А вот остальные как-то заполняются

По идее должно забиваться нулями.


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Qu1nt
Дата 9.4.2012, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 18
Всего: 50



ksili, не вводи людей в заблуждение.
DarkProg, скорее всего у него где-то ошибка. Попробуй с ним связаться и попросить исходники.

PM MAIL   Вверх
DarkProg
Дата 9.4.2012, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Цитата(Qu1nt @  9.4.2012,  22:21 Найти цитируемый пост)
DarkProg, скорее всего у него где-то ошибка.

Ну я тоже на это грешу, потому как очень длинные строки там считать отказывается... а это собственно единственный вариант, где я нашёл так чтобы можно было выбрать кодировку...



--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
ksili
Дата 10.4.2012, 03:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(DarkProg @  10.4.2012,  00:27 Найти цитируемый пост)
независимо от реализации результат должен быть одним

Это если реализуется один и тот же алгоритм.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
ksili
Дата 10.4.2012, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата из википедии:
Цитата

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


Как я и писал сначала - надо узнать конкретно, что надо делать. Тогда будет потрачено меньше времени и сил.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0951 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.