Декодирование сжатой короткой строки;неопределенность в отношении используемого сжатия - Обновлено - PullRequest
4 голосов
/ 22 февраля 2010

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

Вот мои примеры.

(всего 38 x a, без пробелов или чего-либо еще)

In:  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Out: "21 1A A6 30 00"

(всего 32 х а)

In:  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Out: "1c 1a a7 a0 00"

(31 x a, затем 1 b)

In:  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab"
Out: "01 77 c5 53 c0 00"

(31 x b, затем 1 a)

In:  "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba"
Out: "1e 77 54 f3 80 00"


In:   "Hey wot u doing 2day u wanna do something"
Out:  "11 C7 C6 2E 78 CE 6B 8E 3A CD 83 E8 1B 37 C5 C5 A6 B9 D1 E1 B0 69 63 DB 5E 71 15 5C 10 00"

(аналогично предыдущей строке, но с пробелом в конце)

In:  "Hey wot u doing 2day u wanna do something "
Out: "12 C7 71 8B 9E 33 9A E2 EB 36 0F A0 2C DF 17 17 7A 67 47 86 DF 4B 1E DA F3 88 AA E0 80 00"

Любая помощь / совет будут великолепны, спасибо! Кроме того, это может помочь узнать, что это от BlackBerry 8120

1 Ответ

1 голос
/ 24 марта 2010

Маловероятно, что кто-то сможет выяснить, какой алгоритм сжатия используется, просто взглянув на предоставленные строки.

Предполагая, что они также не зашифрованы (а просто преобразованы с использованием алгоритма без ввода ключа или другого секрета), единственный подход, который я могу придумать, это грубая сила. То есть напишите некоторый код для преобразования входных значений, используя разные алгоритмы сжатия, и наблюдайте за созданными выходными данными. Похоже, это не алгоритм LZW, используемый классами .NET DeflateStream и GZipStream, поэтому вы можете пропустить хотя бы один;)

Я бы порекомендовал взглянуть на BlackBerry SDK и выяснить, какие алгоритмы он поддерживает, поскольку он, вероятно, будет одним из них.

Вы также можете найти этот учебник интересным: Взлом сжатия данных

...