Добрый день, уважаемые форумчане! Ситуация следующая: Имеется софт, который хранит некий справочник в БД. Некоторые поля справочника в БД лежат в зашифрованном виде(шестнадцатиричном). Строки зашифрованы каким-то симметричным алгоритмом. Собственно вопрос: существуют ли инструменты для определения алгоритмов шифрования? или может кто-нибудь подскажет что за алгоритм используется. Примеры строк: Зашифрованный текст | Нормальный текст 6A3F34 | вла 6AEB3F | вал 63CD64 | лав 6852D0 | авл 6830D9 | алв 633866 | лва 2853B4FF49 | ааааа 5FC455D248 | ббббб 79EF03EF4B | ввввв 0A343C3E039A0876D5245A1D | Добрый день! BFCDE80F02939CAFFA30 | Добрыйдень Раньше с криптографией не сталкивался, сейчас учу мат-часть. Параллельно решил спросить на форуме. Задача очень срочная. Заранее все спасибо за помощь!
Самодельный алгоритм, похоже, что с накоплением (обратной связью). b bb bbb bbbb c cbbb bcbb bbcb bbbc
b | 20 bb | 549E bbb | EA7A69 bbbb | 04BEB4AA c | 21 cbbb | 4FB95DAB bcbb | 8FBF25AA bbcb | 05BE1FAA bbbc | 04BEB5AA
Тут явственно самодельный алгоритм : байты переставлены, используется накопление (chaining mode) размером в 1 байт.
Ещё несколько вопросов. Какими данными проще оперировать для определения алгоритма: двоичными, десятичными или шестнадцатеричными? Какие комбинации открытого текста лучше использовать (Н-р: а, аа, ааа, аааа или a, ab, abcd, abcde и т.д.)?
Попытаюсь насколько могу формализовать ответ. Для решения каждой подзадачи требуется отдельный набор тестов - где-то одинаковой длины, отличающиеся на 1 бит, на 1 байт, где-то разной длины. 1. Для начала наверное придется разобраться с перестановкой байт. На 4 символах она легко видна, повторить для других длин и понять общую логику процесса перестановки. 2. Дальше нужно определить с разрядностью блока - 1 бит, 1 байт, 64 бита и т.п.. 3. Дальше нужно определить используется ли ECB или "chaining mode" (результат шифрования всех последующих байт зависит от текущего) - это проверяется сравнением например E("bcbb") и E("bbbb") - если ECB, то изменение будет ровно в одном втором байте, а если цепочка, то во всех, начиная со второго. 4. Дальше проверить не является ли операция простейшей + или XOR. Подать на вход пять-шесть пар односимвольных строк, отличающихся на небольшую константу k, и для каждой пары (X;X+k) проверить условия E(X+k)=E(X)+k и E(X XOR k)=E(X) XOR k. 5. Проверить не является ли chaining-операция обычным битовым сдвигом - для этого я предложил байты, отличающиеся ровно на 1 бит в ASCII-кодах (именно поэтому "bc" а не "ab"). Дальше по обстоятельствам.