TGViewer
RUH8 RUH8 @ruheight · 21.7K subscribers
Post #1727 18.2K
Пару не дель назад игрался с фильтрами Блума для поиска строк в заранее известном наборе. Для того чтобы уменьшить количество кода можно взять только одну хеш-функцию, и для того, чтобы получить i-ый хеш, просто сдвигать значение по кругу, эту хитрость придумал Выссоцкий из Bell Labs в конце 60-х. А что возьмем в качестве хеш-функции?

И тут и у аверов, и у вирмейкеров одинаково травматичный опыт. Во времена модемов первое что приходило в голову по поводу хешей CRC, циклическая контрольная сумма. Если ей пользоваться как хешом, то результат будет так себе, контрольные суммы нужны чтобы ловить пакеты ошибок (burst error), а для некриптографических хешей важно, чтобы значения распределялись равномерно.

Аверы получили пиздюлину по скорости, а вирмейкеры по детектам. Потому довольно быстро, ну лет за десять примерно, антивирусные движки стали считать ROL-XOR хеши, а вирмейкеры (снова привет Z0mbie) стали генерировать случайные ROL-ADD, ROL-SUB хеши, подбирая константы так, чтобы не напороться на коллизию. И CRC куда уж без него, и там очень смешное с выбором п̶о̶л̶и̶н̶о̶м̶а многочлена, я знаю вы любите это слово со школы.

В случае с фильтром, у нас есть набор строк, и все что нас интересует, чтобы у каждой строки был свой уникальный идентификатор. Потому генерировать хеш мы будем случайно, из одной или нескольких операций "подмешивающих" в хеш текущий символ, и битмиксера (используются в качестве финализаторов во взрослых хешах). В качестве "вращающегося" хеша, мы можем взять битмиксер же, не только ROL/ROR.

Остается проверить фильтр (не только хеш) на коллизии и готово. У нас есть случайная функция, массив со случайными значениями случайного размера, с которым что-то происходит в цикле случайное количество раз, а на выходе мы получаем машинку распознающую заранее заданные строки из известного набора строк.

(Если поиграться с параметрами, то можно даже получить компрессию, на картинке 15 строк длиной 91 байт из 36Кб списка прекрасно умещаются в фильтр длиной 32 байта)

А и все. Чего вы еще ждали в воскреченье утром? Пойду чистить и комментировать код, и зашлю его потом на VXUG
  • 👍 122
  • 🤔 45
  • 🥱 11
  • 🔥 5
More from @ruheight
  1. Aug 29, 2026Техническое. Если кому-то не ответил, сразу чего-то не сделал, то я иногда сильно занят в…
  2. Aug 24, 2026Вышел tmp.out #5
  3. Aug 22, 2026На лошадярне нешуточная ажитация. Не понимаю. Я вот целиком и полностью поддерживаю правос…
  4. Aug 18, 2026А не пошел бы ты, Михаил Альбертович, нахуй? А можно и для гендерного равноправия - в пизд…
  5. Jul 18, 2026По-моему, самое время распустить "IT Армию" и "Киберкорпус". Хорошо было бы, если безобраз…
  6. Jul 9, 2026Каждый раз, когда я наблюдаю за идиотами в их естественной среде обитания, у меня возникае…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →