Подбор алгоритма вычисления контрольной суммы (C#)

Потребовалось определить алгоритм нахождения контрольной суммы, имея массивы насниференных байт данных и контрольные суммы к ним. Изначально были перепробованы все наиболее известные алгоритмы CRC, и уже после этого, почти отчаявшись, была написана программа (скорее, переписана), которая нашла решение за несколько секунд. С этого и надо было начинать!

Исходный код был переведен из JavaScript вот отсюда (CRC Calculator (Javascript)), спасибо тебе, Bastian Molkenthin.

Использовались параметры:

  1. Width of CRC (8, 16 or 32 bit) – количество битов CRC, или степень многочлена
  2. Polynomial – порождающий полином
  3. Initial CRC value – стартовое значение регистра
  4. Final XOR value –  число, с которым складывается по модулю 2 полученный результат
  5. Input reflected – флаг, определяющий, инвертируется ли порядок битов регистра при входе на элемент XOR
  6. Result reflected – флаг переворота битов регистра при входе на элемент XOR

Алгоритм работы программы:

1) имеем несколько массивов байт и контрольные суммы к ним

2) перебираем варианты возможных значений шести параметров нахождения контрольной суммы

3) проверяем каждый вариант (2), подсовывая несколько массивов байт (1) и сверяя полученную контрольную сумму с имеющейся

4) если на одном из вариантов (2) у всех массивов байт значения контрольных сумм совпали с исходными, значит подобраны подходящие параметры. BINGO!!!

Проект: Ссылка

0

One thought on “Подбор алгоритма вычисления контрольной суммы (C#)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *