-1

我对安全性或任何类似性质的东西并不真正感兴趣,但我需要一些允许我“压缩”/“解压缩”字符串的函数。我已经尝试过 Base64,但是字符串的大小有一个很大的问题,它使它更长。我也知道这个霍夫曼的东西,但这也不起作用,因为它也使它更长(在内存方面更少,它是一个整数)。

换句话说,我希望将任意字符串“djshdjkash”编码为其他字符串“dhaldhnctu”。能够从一个到另一个,并且新字符串的长度等于或小于原始字符串。

Javascript可以做到这一点,已经完成了吗?

  • 需要澄清,正如我所说,安全不是目标,只是为了伪装字符串并保持其长度(或缩短它)。Base64 是最好的例子,但它使字符串更长。ROT13 很简洁,但不涵盖所有 ASCII 字符,仅涵盖字母。
4

5 回答 5

2

您需要压缩,而不是编码。编码通常会添加位。谷歌“字符串压缩算法”。

于 2010-02-21T00:00:46.103 回答
1

罗特13?

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

于 2010-02-20T23:55:54.693 回答
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(),您可以将两个 ASCII 字符压缩为一个 Unicode 字符。因此,像hello, world(12 个字符)这样的字符串可能会导致\u6865\u6c6c\u6f2c\u206f\u6f72\u6c64(6 个字符)。尽管您不这样做,但您必须非常小心'不要生成像这样的无效字符\uFFFF,并且您始终可以从压缩字符串返回到未压缩字符串。

另一方面,如果你想减少字符串文字的长度,这种方式是完全错误的。所以请澄清你想在什么情况下压缩字符串。

于 2010-03-24T03:33:09.640 回答
0

您可以使用简单的替换密码。这是JavaScript 中的一个示例

请注意,有一些工具可以破解替换密码。在走这条路之前,请确保这里的安全不是问题。

于 2010-02-21T00:14:14.007 回答