[История вопроса]
Я работаю с 5-летней системой идентификации пользователей и пытаюсь добавить идентификаторы в базу данных.У меня проблема в том, что система, которая считывает идентификационные номера, требует какой-то контрольной суммы, и никто из работающих здесь сейчас никогда не работал с ней, поэтому никто не знает, как она работает.
У меня есть доступк списку существующих идентификаторов, которые уже имеют правильные контрольные суммы.Кроме того, поскольку контрольная сумма имеет только 16 возможных значений, я могу создать любой желаемый идентификатор и запустить его через систему аутентификации до 16 раз, пока не получу правильную контрольную сумму (но это довольно много времени)
[Вопрос]
Какие методы я могу использовать, чтобы помочь угадать алгоритм контрольной суммы, используемый для некоторых данных?Я пробовал несколько простых методов, таких как XOR и суммирование, но они не сработали.
Поэтому мой вопрос: если у меня есть данные (в шестнадцатеричном формате), например:
data checksum
00029921 1
00013481 B
00026001 3
00004541 8
Какие методы я могу использовать, чтобы определить, какую контрольную сумму использовать?то есть я должен попробовать последовательные числа, такие как 00029921,00029922,00029923, ... или 00029911,00029921,00029931, ... Если я сделаю это, какие шаблоны я должен искать в изменяющейся контрольной сумме?
Аналогично,Скажет ли мне что-нибудь полезное о контрольной сумме при сравнении помененных цифр?т.е. 00013481 и 00031481
Есть ли что-нибудь еще, что могло бы сказать мне что-то полезное?Как насчет инвертирования одного бита или, возможно, одной шестнадцатеричной цифры?
Я предполагаю, что это будет общий алгоритм контрольной суммы, но я не знаю, с чего начать его тестирование.Я прочитал следующие ссылки, но я не уверен, смогу ли я применить что-либо из этого к своему делу, так как я не считаю, что это CRC.
stackoverflow.com / questions / 149617Алгоритм / как я мог угадать контрольную сумму stackoverflow.com / вопросы / 2896753 / найти алгоритм, который генерирует контрольную сумму cosc.canterbury.ac.nz / greg.ewing / essays / CRC-Reverse-Engineering.html
[ОТВЕТ]
Я сейчас скачал гораздо больший списокданных, и это оказалось проще, чем я ожидал, но для полноты вот что я сделал.
data:
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 mod 16:
((Σx i ) + 0xA) mod16
И этосоответствует всем ценностям, которые у меня были.Просто чтобы убедиться, что с первыми 3 цифрами, которые никогда не менялись в моих данных, не было ничего подлого, я придумал и проверил некоторые цифры, как предложил Эрик, и все они тоже с этим работали!