2016-11-20 2 views
1

Я искал для осуществления Lua в CRC32 и наткнулся на это: https://github.com/openresty/lua-nginx-module/blob/master/t/lib/CRC32.luaCRC32 числа хэш строки

Однако она возвращает целочисленный хэш, как бы я идти о получении строки эквивалента этого?

Используя вход "что-то" он возвращает: 1850105976

Использование онлайн генератор CRC32 я получаю: "879fb991"

+1

Должно быть '09DA31FB' –

+1

Существует по крайней мере [9 различных сумм CRC32] (http://www.sunshine2k.de/coding/javascript/crc/crc_js.html) –

+0

Я вижу, но это на самом деле ответьте на мой вопрос – user1826176

ответ

4

Есть много алгоритмов CRC32. Вы можете найти десять различных CRC-32, задокументированных в this catalog. Код Lua, который вы нашли, и онлайн-CRC32, который вы нашли (где-то - никакая ссылка не была предоставлена), являются разными CRC-32.

Что вы подразумеваете под «эквивалентом строк», является шестнадцатеричным представлением 32-разрядного целого числа. В Lua вы можете использовать string.format с форматом печати %x, чтобы получить шестнадцатеричный. Для примера, который вы дали, 1850105976, это будет 6e466078.

Ваш «онлайн-генератор CRC32», по-видимому, использует BZIP2 CRC-32, хотя он показывает вам байты результирующего CRC в обратном порядке (little-endian). Таким образом, фактический CRC в этом случае в шестнадцатеричном виде равен 91b99f87. Вы нашли код Lua, который использует MPEG-2 CRC-32. Единственная разница между ними - эксклюзивная или с ffffffff. Так что на самом деле эксклюзивные или из двух CRC, которые вы получили из двух разных источников, 6e466078^91b99f87 - ffffffff.

+0

Большое спасибо! – user1826176

+1

@ user1826176 Вы также можете попробовать: https://github.com/hjelmeland/luacrc32 (доступный через luarocks по адресу https://luarocks.org/modules/hjelmeland/crc32) – hjpotter92

+1

@ hjpotter92 Это выглядит намного лучше. Это более стандартный PKZip/ITU v.42 CRC-32, и реализация, по-видимому, использует реальные битовые операции (сдвиги и исключительные или) в отличие от очень медленных реализаций с арифметикой в ​​коде, связанном с вопросом. –