|
|
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Нашел следующую реализацию алгоритма CRC32: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2011, 22:54 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
Siemargldaunito, table[] Что table[]? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2011, 01:34 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
Я имею ввиду, что такое Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2011, 01:35 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
daunito, начало расчета полинома. Подробнее в вике ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2011, 09:34 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
Siemargldaunito, начало расчета полинома. Подробнее в вике Но в вики другие цифры :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2011, 10:30 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
Siemargldaunito, начало расчета полинома. Подробнее в вике Что значит "начало расчета полинома"? Полином уже есть, его не надо рассчитывать. Xor'иться сообщение должно с полиномом, а тут оно везде ксорится с маской. Если в педии есть рассказ про маску, кинь ссылку, плиз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2011, 18:38 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
daunitoЯ имею ввиду, что такое Код: plaintext В оригинале нету такого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2011, 19:42 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
Алгоритм CRC32 - это слишком общее название. Наверное речь идёт о методе или типе полинома. Здесь аж 5 штук описано. Какой у автора - Х.З. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2011, 21:48 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
SiemargldaunitoЯ имею ввиду, что такое Код: plaintext В оригинале нету такого. Глюк, не глюк, а работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2011, 03:12 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
maytonАлгоритм CRC32 - это слишком общее название. Наверное речь идёт о методе или типе полинома. Здесь аж 5 штук описано. Какой у автора - Х.З. Почему это Х.З.? Полином же в коде написан. Стандартный 0хEDB88320, по которому считает WinRAR. Неужели никто в CRC не шарит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2011, 03:17 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
daunitoSiemarglпропущено... Это глюк в твоем найденном на болоте коде ) В оригинале нету такого. Глюк, не глюк, а работает.Чего бы не работал, просто можно потерять в качестве хэширования. Результат вычисления совпадает с другими расчетами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2011, 13:18 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
daunitoНеужели никто в CRC не шарит? Я не шарю... но заинтересовался. Короче, как я понял, смысл в том, что table[1] ^ table[254] = Mask table[2] ^ table[253] = Mask Идет просто подмена значений таблицы, и эта подмена корректируется маской. Код из wiki эквивалентен коду из поста 1: Код: plaintext 1. 2. 3. 4. 5. Дальше, писать не буду разобраться можно, если представить, что пришел первый байт, равный 0х1, и прокрутить оба алгоритма по шагам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2011, 14:31 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
refregОбрати внимание на & 0xFF . Эта добавка инвертирует начальный 0xFFFFFFFFUL;Бред, конечно, написал. Имел ввиду, начальный crc разный, с точностью до инверсии, и поэтому выбирается из таблицы с разных концов. Все остальное в силе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2011, 14:50 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
daunitomaytonАлгоритм CRC32 - это слишком общее название. Наверное речь идёт о методе или типе полинома. Здесь аж 5 штук описано. Какой у автора - Х.З. Почему это Х.З.? Полином же в коде написан. Стандартный 0хEDB88320, по которому считает WinRAR. Неужели никто в CRC не шарит? Если ты пришёл спрашивать - то спрашивай. Если считаешь себя шарящим то можешь сам ответить на вопрос "откуда берется маска и для чего она нужна". В противном случае создаётся впечатление что за тебя пишут два разных человека. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2011, 14:54 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
maytondaunitoпропущено... Почему это Х.З.? Полином же в коде написан. Стандартный 0хEDB88320, по которому считает WinRAR. Неужели никто в CRC не шарит? Если ты пришёл спрашивать - то спрашивай. Если считаешь себя шарящим то можешь сам ответить на вопрос "откуда берется маска и для чего она нужна". В противном случае создаётся впечатление что за тебя пишут два разных человека.Я не имел ввиду, что я сильно в нем шарю. Просто мне нужен конкретный ответ, типа нужно для того-то и того-то, от человека, который понимает алгоритм и конкретно эту реализацию. SiemarglЧего бы не работал, просто можно потерять в качестве хэширования. Результат вычисления совпадает с другими расчетами? Результат полностью совпадает с расчетами WinRAR и TotalCommander. Скорость даже чуть выше, хотя может из-за буферизации показалось (проверял на одном и том же файле сначала вышеуказанными прогами, потом кодом в сабже) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2011, 20:58 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
0xEDB88320 = 1110 1101 1011 1000 1000 0011 0010 0000 (bin) - переворачиваем наоборот и получаем 00000100110000010001110110110111 = 0x4C11DB7 весовые коэффициенты членов полинома. Если-бы ты прочитал ссылку которую я привёл внимательно то увидел-бы фразу "зеркальное отображение". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2011, 22:00 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
mayton0xEDB88320 = 1110 1101 1011 1000 1000 0011 0010 0000 (bin) - переворачиваем наоборот и получаем 00000100110000010001110110110111 = 0x4C11DB7 весовые коэффициенты членов полинома. Если-бы ты прочитал ссылку которую я привёл внимательно то увидел-бы фразу "зеркальное отображение". Спасибо за ссылку, но я ее прочитал еще до того как на форуме писать. Да, EDB88320 - это зеркальная реализация, тут все понятно. Но вопрос-то про маску не раскрыт. Маска такая откуда взялась? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2011, 19:19 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
refregrefregОбрати внимание на & 0xFF . Эта добавка инвертирует начальный 0xFFFFFFFFUL;Бред, конечно, написал. Имел ввиду, начальный crc разный, с точностью до инверсии, и поэтому выбирается из таблицы с разных концов. Все остальное в силеЧто ты имеешь ввиду, под разным crc с точностью до инверсии? Действительно как ты писал, xor с маской переворачивает зеркально таблицу, т.е. последнее значение становится первым. Я только не пойму, таблица же рассчитывалась с уже зеркальным полиномом, зачем ее еще и переворачивать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2011, 19:52 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
Давай сравним реализации алгоритма с wiki и твоего Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. Они отличаются инициализацией и телом цикла. Константа всплыла скорее всего как поправка на инициализацию. Я-бы лучше не плавил себе мозг этой проблемой (лучше подумать над Гильбертом ). А просто взял имплементацию которая короче и делает внутри цикла меньше операций. (Естественно, проведя хотя-бы по 1 testcase для каждого исходника). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2011, 19:58 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
refreg, спасибо. Сам спросил и сам же потом понял ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2011, 20:00 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
mayton, да реализацию я уже взял, все нормально работает. Но вот объяснить ее не мог в связи с неполным пониманием работы сего чуда. Да и самому как-то стремно пользоваться кодом, которого не понимаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2011, 20:07 |
|
||
|
Алгоритм CRC32
|
|||
|---|---|---|---|
|
#18+
refregКороче, как я понял, смысл в том, что table[1] ^ table[254] = Mask table[2] ^ table[253] = MaskПодправлюсь, на самом деле: Код: plaintext --- Возникает, вопрос - почему при формировании таблицы сразу не проXORили с маской. Тогда бы в цикле было бы на одну операцию меньше... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2011, 08:46 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37288305&tid=1342913]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
163ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 462ms |

| 0 / 0 |
