Question

Je ne suis pas vraiment intéressé par la sécurité ou quoi que ce soit de cette nature, mais je dois une fonction (s) qui me permettent de « compresser » / « décomprimer » une chaîne. J'ai essayé base64, mais qui a un gros problème avec la taille de la chaîne, il fait plus. Je sais aussi de ce genre de choses Huffman, mais cela ne fonctionne pas, soit parce qu'elle aussi rend plus (moins en termes de mémoire, il est un entier).

En d'autres termes, je veux une chaîne arbitraire « de djshdjkash » à coder à une autre chaîne « dhaldhnctu ». Être en mesure d'aller de l'un à l'autre, et ont la longueur de la nouvelle chaîne soit égale ou inférieure à l'original.

Est-ce possible avec Javascript, a déjà été fait?

  • nécessaire pour clarifier, comme je l'ai dit la sécurité n'est pas l'objectif, juste pour déguiser la chaîne et conserve sa longueur (ou raccourcir). Base64 est le meilleur exemple, mais il fait des chaînes plus longues. ROT13 est propre, mais ne couvre pas tous les caractères ASCII, seules les lettres.
Était-ce utile?

Autres conseils

Vous avez besoin d'une compression, pas l'encodage. L'encodage ajoute généralement des bits. Google "chaîne de compression des algorithmes."

Depuis ROT13 est parce qu'elle ne concerne que les alphas, pourquoi ne pas mettre en œuvre quelque chose à travers un jeu de caractères plus grande. Mettre en place un tableau de from de caractères contenant votre jeu de caractères entier imprimable et un tableau de to contenant les mêmes caractères dans un ordre différent.

Alors pour tous les caractères dans votre chaîne, si elle est dans le tableau de from, le remplacer par la position équivalente dans le tableau de to.

Cela donne aucune compression, mais satisfera toutes vos exigences (plus ou moins de même longueur, chaîne déguisée).

En pseudo-code, quelque chose comme:

chfrom = "ABCDEF..."
chto   = "1$#zX^..."
def encode(s1):
    s2 = ""
    foreach ch in s1:
        idx = chfrom.find(ch)
        if idx == -1:
            s2 += ch
        else:
            s2 += chto[idx]
    return s2
def decode(s1):
    # same as encode but swap chfrom and chto.

Je ne sais pas ce que vous voulez compresser exactement. Si elle est la longueur de la chaîne (comme on le voit par String.length(), vous pouvez compresser deux caractères ASCII en caractères Unicode. Ainsi, une chaîne comme hello, world (12 caractères) peut entraîner \u6865\u6c6c\u6f2c\u206f\u6f72\u6c64 (6 caractères). Vous devez être très prudent si que vous ne génèrent pas des caractères non valides comme \uFFFF et que vous pouvez toujours revenir en arrière de la chaîne compressée à celle non compressé.

Par contre, si vous voulez réduire la longueur de la chaîne littérale, de cette façon est complètement faux. Alors, s'il vous plaît préciser dans quelles circonstances vous souhaitez compresser les chaînes.

Vous pouvez utiliser un href="http://en.wikipedia.org/wiki/Substitution_cipher" simple . Voici un exemple en JavaScript .

Notez qu'il existe des outils là-bas pour briser les chiffrements de substitution. Faire que La sécurité n'est pas un problème ici avant d'aller dans cette voie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top