2010-02-22 30 views
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" 

任何幫助/意見將是巨大的,謝謝! 此外,它可能有助於知道這些是從黑莓8120

+0

你可以嘗試一些壓縮其他投入,例如一個空字符串,一個字符,兩個字符? – 2010-02-22 15:53:50

+0

我不敢,我害怕;我沒有這個程序,只是給了這些例子,並要求制定壓縮方法...我已經被告知它不會壓縮30個字符以下的字符串,但因爲這樣做效率不高。 – James 2010-02-22 16:06:04

+0

另一個觀察添加;對於兩個相似的字符串,在同一點有兩個重複的字節。第一個是c5c5,第二個是1717.可能是巧合,或許也可能與「nn」有關? – James 2010-02-23 09:33:04

回答

1

它不可能有人可以通過查看提供的字符串找出使用什麼樣的壓縮算法。

假設它們還沒有加密(但只是使用一個算法,而沒有輸入密鑰或其他類型的祕密),我能想到的唯一方法是蠻力。也就是說,編寫一些代碼來使用不同的壓縮算法來轉換輸入值,並觀察生成的輸出。它似乎不是由.NET DeflateStream和GZipStream類使用的LZW算法,因此您可以跳過至少一個;)我的建議是查看BlackBerry SDK並找出它支持的算法,因爲它可能是其中之一。

您也可以發現這個教程感興趣:Hacking Data Compression

+0

感謝您的鏈接,我現在要解決這個問題。 Blackberry SDK顯示對zlib,gzip和deflate的支持......這些都不起作用。在blackberrys上有很多加密API文件,但我希望它只是壓縮,無論如何都不加密 我希望我只是錯過了一些東西:)但我會嘗試蠻力的方式,因爲你建議並讓你知道我該如何... – James 2010-03-24 09:04:55