-1

セキュリティやその性質にはあまり興味がありませんが、文字列を「圧縮」/「解凍」できる関数が必要です。Base64 を試してみましたが、文字列のサイズに大きな問題があり、長くなります。私はこのハフマンのものについても知っていますが、それも長くなるため機能しません(メモリの点では整数です)。

つまり、任意の文字列「djshdjkash」を別の文字列「dhaldhnctu」にエンコードする必要があります。1 つのストリングから別のストリングに移動でき、新しいストリングの長さを元のストリングと同じかそれ以下にすることができます。

これはJavascriptで可能ですか?それはすでに行われていますか?

  • セキュリティは目的ではないと言ったので、文字列を偽装してその長さを維持する(または短くする)だけであることを明確にする必要があります。Base64 は最良の例ですが、文字列が長くなります。ROT13 はきちんとしていますが、すべての ASCII 文字をカバーしているわけではなく、文字だけをカバーしています。
4

5 に答える 5

2

エンコードではなく、圧縮が必要です。エンコーディングは一般にビットを追加します。Google「文字列圧縮アルゴリズム」。

于 2010-02-21T00:00:46.103 に答える
1

ROT13はアルファ版にのみ影響するためリリースされているので、より大きな文字セット全体に何かを実装してみませんか。from印刷可能な文字セット全体を含む文字の配列と、to同じ文字を異なる順序で含む配列を設定します。

次に、文字列内のすべての文字について、配列内にある場合は、from配列内の同等の位置に置き換えtoます。

これにより、圧縮はまったく行われませんが、すべての要件(より短いまたは同じ長さ、偽装された文字列)を満たします。

擬似コードでは、次のようになります。

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.
于 2010-02-21T00:14:41.787 に答える
1

何を圧縮したいのか正確にはわかりません。それが文字列の長さである場合 ( で見られるようにString.length()、2 つの ASCII 文字を Unicode 文字に圧縮できます。したがって、hello, world(12 文字) のような文字列は\u6865\u6c6c\u6f2c\u206f\u6f72\u6c64(6 文字) になる可能性があります。のような無効な文字を生成しない\uFFFFでください。圧縮された文字列から圧縮されていない文字列にいつでも戻ることができます。

一方、文字列リテラルの長さを短くしたい場合、この方法は完全に間違っています。したがって、文字列を圧縮する状況を明確にしてください。

于 2010-03-24T03:33:09.640 に答える
1

ROT13?

http://en.wikipedia.org/wiki/ROT13

于 2010-02-20T23:55:54.693 に答える
0

単純な換字式暗号を使用できます。これがJavaScriptの例です。

換字式暗号を破るツールがあることに注意してください。この道を進む前に、ここでセキュリティが問題になっていないことを確認してください。

于 2010-02-21T00:14:14.007 に答える