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

У меня есть строка:

RP581147238IN, который кодируется как A3294Fc0Mb0V1Tb4aBK8rw==

и еще одна строка:

RP581147239IN, который кодируется как A3294Fc0Mb1BPqxRDrRXjQ==

Но проведя день, я так и не могу понять, что такое процесс кодирования.

Закодированная строка выглядит так, как будто она закодирована в base64.

Но когда я его декодирую, это выглядит так: base64.decodestring("A3294Fc0Mb0V1Tb4aBK8rw==") \x03}\xbd\xe0W41\xbdA>\xacQ\x0e\xb4W\x8d

Декодированная строка base 64 теперь выглядит как сжатая строка zlib.

Я пытался в дальнейшем использовать методы декомпрессии zlib, но ни один из них не сработал.

import zlib, base64
rt = 'A3294Fc0Mb1BPqxRDrRXjQ=='

for i in range(-50, 50):
    try:                                      
        print(zlib.decompress(base64.decodestring(rt), i));
        print("{} worked".format(i))
        break
    except:
        pass

Но и это не дало никаких результатов.

Кто-нибудь может понять, какой здесь используется процесс кодирования. @Nirlzr, я смотрю на вас за героический ответ, который вы предоставили в HTTP-запросе обратного проектирования.


person John    schedule 04.04.2017    source источник
comment
@Nirlzr, я обращаюсь к вам за помощью   -  person John    schedule 04.04.2017
comment
К сожалению, я не думаю, что смогу помочь здесь. Если вы не готовы проделать гораздо больше работы, вам придется перепроектировать код, генерирующий эти выходные данные, чтобы выяснить, что он делает.   -  person NirIzr    schedule 04.04.2017


Ответы (2)


Если вы поместите свои строки данных рядом:

RP581147238IN A3294Fc0Mb0V1Tb4aBK8rw==
RP581147239IN A3294Fc0Mb1BPqxRDrRXjQ==

Вы можете видеть, что исходные строки отличаются только символами, а закодированная версия содержит 12 разных символов:

  ----------8-- ----------0V1Tb4aBK8rw--
  ----------9-- ----------1BPqxRDrRXjQ--

Закодированные данные имеют такие же отступы в конце, как и base64, но определенно это не base64. Вероятно, зашифрован каким-то SHA-подобным алгоритмом. С предоставленными вами данными я бы сказал, что невозможно перепроектировать процесс кодирования. Возможно, дополнительные данные тоже не сильно помогут.

person Exu    schedule 04.04.2017

Строки кажутся закодированными в Base64, а базовые декодированные данные кажутся зашифрованными. Зашифрованные данные не могут быть напрямую представлены в виде строки, и обычно Base64 кодирует зашифрованные данные, когда требуется строка.

Если это так, вам нужно расшифровать декодированные данные и игнорировать, чтобы выполнить это, вам понадобится ключ шифрования.

Примечание. В общем случае сжимать такие короткие элементы нецелесообразно.

person zaph    schedule 04.04.2017