Какие методы можно использовать использовать для анализа и угадывания 4-битного алгоритма контрольной суммы?

[Предыстория]

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

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

[Вопрос]

Какие методы я могу использовать, чтобы угадать алгоритм контрольной суммы, используемый для некоторых данных? Я пробовал несколько простых методов, таких как XORing и суммирование, но они не сработали.

Итак, мой вопрос: есть ли у меня данные (в шестнадцатеричном формате) вроде этого:

data        checksum
00029921    1
00013481    B
00026001    3
00004541    8

Какие методы я могу использовать, выясните, какой контрольной суммы используется? то есть должен ли я попробовать последовательные числа, такие как 00029921,00029922,00029923, ... или 00029911,00029921,00029931, ... Если я сделаю это, какие шаблоны мне следует искать в изменяющейся контрольной сумме?

Аналогично, будет ли сравнение заменено цифры скажите мне что нибудь полезное о контрольной сумме? т.е. 00013481 и 00031481

Есть ли что-нибудь еще, что могло бы сказать мне что-нибудь полезное? А как насчет инвертирования одного бита или, может быть, одной шестнадцатеричной цифры?

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

stackoverflow.com/questions/149617/how-could-i алгоритм-угадай-контрольной суммы stackoverflow.com/questions/2896753/find-the-algorithm-that-generates-the-checksum cosc.canterbury.ac.nz/greg.ewing/essays/CRC -Reverse-Engineering.html

[ОТВЕТ]

Теперь я загрузил гораздо больший список данных, и он оказался проще, чем я ожидал, но для полноты картины я сделал следующее.

данные:

00024901 A
00024911 B
00024921 C
00024931 D
00042811 A
00042871 0
00042881 1
00042891 2
00042901 A
00042921 C
00042961 0
00042971 1
00042981 2
00043021 4
00043031 5
00043041 6
00043051 7
00043061 8
00043071 9
00043081 A
00043101 3
00043111 4
00043121 5
00043141 7
00043151 8
00043161 9
00043171 A
00044291 E

Из них я мог видеть, что когда только одно значение увеличивалось на значение, контрольная сумма также увеличивалась на то же значение, что и в:

00024901 A
00024911 B

Кроме того, замена двух цифр не изменила контрольную сумму:

00024901 A
00042901 A

Это означает, что значение полинома (по крайней мере для этих двух позиций) должно быть одинаковым

Наконец, контрольная сумма для 00000000 была A, поэтому я вычислил сумму цифр плюс A по модулю 16:
((Σx i ) + 0xA) mod16
И это соответствует всем имеющимся у меня значениям. Просто чтобы убедиться, что с первыми тремя цифрами, которые никогда не менялись в моих данных, ничего не происходило, я составил и проверил некоторые числа, как предложил Эрик, и все они тоже сработали!

5
задан Community 23 May 2017 в 12:06
поделиться