我有一个以未知方式压缩字符串的程序。我知道一些输入和输出产生,但我不确定是用什么来压缩字符串。
以下是我的例子。
(仅38 x a,没有空格或其他任何东西)
In: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Out: "21 1A A6 30 00"
(仅32 x a)
In: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Out: "1c 1a a7 a0 00"
(31 x a,然后是1b)
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
答案 0 :(得分:1)
通过查看提供的字符串,不太可能有人能够找出使用何种压缩算法。
假设它们也没有加密(但只是在没有输入密钥或其他秘密的情况下使用算法进行转换),我能想到的唯一方法就是蛮力。也就是说,编写一些代码来使用不同的压缩算法转换输入值并观察生成的输出。它似乎不是.NET DeflateStream和GZipStream类使用的LZW算法,因此您可以跳过至少一个;)
我的建议是查看BlackBerry SDK并找出它支持的算法,因为它可能就是其中之一。
您也可能会对本教程感兴趣:Hacking Data Compression