4

我有一个以未知方式压缩字符串的程序。我知道一些输入和产生的输出,但我不确定使用什么来压缩字符串。

这是我的例子。

(只有 38 xa,没有空格或其他任何东西)

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

(仅 32 xa)

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

(31 xa,然后 1 b)

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

(31 xb,然后 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 可能会有所帮助

4

1 回答 1

1

仅仅通过查看提供的字符串,某人不太可能弄清楚正在使用哪种压缩算法。

假设它们也没有加密(而只是使用没有输入密钥或其他类型秘密的算法进行转换),我能想到的唯一方法是蛮力。也就是说,编写一些代码来使用不同的压缩算法转换输入值并观察生成的输出。它似乎不是 .NET DeflateStream 和 GZipStream 类使用的 LZW 算法,因此您至少可以跳过一个;)

我的建议是查看 BlackBerry SDK 并找出它支持的算法,因为它很可能就是其中之一。

您可能还会对本教程感兴趣:Hacking Data Compression

于 2010-03-24T05:22:17.387 回答