2010-02-22 14 views
4

J'ai un programme qui compresse une chaîne d'une manière inconnue. Je connais quelques entrées et la sortie produite, mais je ne suis pas sûr de ce qui est utilisé pour compresser la corde.Décodage d'une chaîne courte compressée; incertain sur la compression utilisée - Mise à jour

Voici mes exemples.

(seulement 38 xa, sans espaces ni quoi que ce soit d'autre)

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

(seulement 32 xa)

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

(31 xa, puis 1 b)

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

(31 xb, puis 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" 

(identique à la chaîne précédente, mais avec un espace à la fin)

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" 

Toute aide/conseils serait génial, merci! En outre, il peut être utile de savoir que ceux-ci proviennent d'un BlackBerry 8120

+0

Pouvez-vous essayer compresser d'autres entrées, par exemple une chaîne nulle, un seul caractère, deux caractères? –

+0

Je ne peux pas avoir peur; Je n'ai pas le programme, on m'a juste donné ces exemples et on m'a demandé de mettre au point la méthode de compression ... On m'a dit qu'il ne comprimerait pas les chaînes de moins de 30 caractères, car ce n'est pas efficace. – James

+0

Une autre observation à ajouter; pour les deux chaînes similaires, il y a deux octets répétés au même point. Pour le premier c'est c5c5, et le second est 1717. Peut-être une coïncidence, pourrait aussi se rapporter au "nn" dans wanna peut-être? – James

Répondre

1

Il est peu probable que quelqu'un puisse comprendre quel type d'algorithme de compression est utilisé juste en regardant les chaînes fournies.

En supposant qu'ils ne sont pas cryptés aussi (mais simplement transformés en utilisant un algorithme sans l'entrée d'une clé ou d'un autre type de secret), la seule approche que je peux penser est la force brute. C'est-à-dire, écrire du code pour transformer les valeurs d'entrée en utilisant différents algorithmes de compression et observer les sorties générées. Il ne semble pas être l'algorithme LZW utilisé par les classes .NET DeflateStream et GZipStream, donc vous pouvez en sauter au moins un;)

Ma recommandation serait de regarder BlackBerry SDK et de trouver quels algorithmes il prend en charge, comme il est susceptible d'être l'un de ceux.

Vous pouvez également trouver ce tutoriel pour intéresser: Hacking Data Compression

+0

merci pour le lien, je vais travailler à travers cela maintenant. Blackberry SDK affiche le support pour zlib, gzip et dégonfler ... Rien de tout cela ne semble fonctionner. Il y a beaucoup de fichiers crypto api sur les blackberrys, mais j'espère que c'est juste compressé et non crypté de toute façon J'espérais avoir raté quelque chose :) mais je vais essayer la manière brute comme vous le suggérez et laissez-vous savoir comment je m'entends .. – James