2009-09-29 9 views
0

Je souhaite compresser/transformer une chaîne en nouvelle chaîne.Chaîne d'entrée compressée sous forme de chaîne

-à-dire: chaîne d'entrée :

USERNAME/REGISTERID 

chaîne de sortie après compress:

<some-string-in-UTF8-format> 

chaîne de sortie après decompress:

USERNAME/REGISTERID 

Il existe une méthode de compression ou hachage pour cette transformation?

Je préfère une solution utilisant Java ou un algorithme avec des étapes de processus de base.

J'ai déjà lu et essayé d'utiliser la transformation Huffman, mais la sortie compressée est composée de bytes sort UTF-8 charset.

+1

Pourquoi est-ce un wiki? – AnthonyWJones

+0

désolé ... je fais une erreur. – apast

Répondre

1

Jetez un oeil à Base64, commons-codec, etc.

Commons code fournit une Base64 class très simple à utiliser. Vous ne pouvez pas utiliser une fonction de hachage car les fonctions de hachage sont généralement destinées à un seul sens: c'est-à-dire un hachage MD5 ou SHA1, vous ne devriez pas pouvoir le décoder pour savoir quel était le message source.

+0

Vraiment, les fonctions de hachage sont unidirectionnelles. Merci! Et passé – apast

+0

@matt: il est possible d'utiliser une fonction de hachage à cet effet même s'il s'agit d'une fonction à sens unique, il suffit de conserver dans une structure persistante (base de données, fichier, quel que soit) utilisé dans la clé de l'utilisateur/registerid ...ok, si vous le faites de cette façon, il pourrait même être choisi au hasard des nombres ou des chaînes. – kriss

2

Vous pouvez utiliser ZipOutputStream.

ByteArrayOutputStream result = new ByteArrayOutputStream(); 
    new ZipOutputStream(result).write("myString".getBytes()); 
    byte[] bytes = result.toByteArray(); 

Vous avez juste à déterminer le bon encodage de chaîne. Ce cas doit être fait avec un Base64 representation.

0

Si vous avez des identifiants de base de données pour vos identifiants comme votre nom l'indique, pourquoi ne pas utiliser ce numéro comme encodage? (mettez-le en tant que chaîne si vous aimez).

Vous ne devriez pas espérer obtenir une meilleure compression en utilisant des algorithmes de compression car ils ont tous besoin d'en-têtes et la taille de l'en-tête est probablement plus longue que votre chaîne d'entrée.

+0

Je n'ai pas de base de données pour les clés. La compression n'est pas pour la réduction de transfert de données, mais une obfuscation simple et naïve des données d'origine. Merci, Et passé – apast

0

Il semble que quelqu'un vous demande d'obscurcir les combinaisons nom d'utilisateur/mot de passe. Ce n'est probablement pas une bonne idée, car cela suggère la sécurité là où il n'y en a pas. Vous pouvez aussi implémenter un chiffrement ROT13 pour cela et utiliser double ROT13 pour déchiffrer.

Questions connexes