用ASCII解码编码文本

时间:2014-07-21 13:18:15

标签: java encoding ascii decode

我正在使用以下方法对给定文本进行编码。

static long encodeText(String text) {
    long l = 31;
    for (int i = 0; i < text.length(); i++) {
        l = l * 47 + text.getBytes()[i] % 97;
    }
    return l;
}

当我将上述方法称为encodeText("stackoverflow")时,请返回编码文本3818417496786881978

现在我想提供编码文本并获取String值。例如,如果我将3818417496786881978提供给decodeText(long encoded),我需要输出stackoverflow

static String decodeText(long encoded) {
    String str = null;
    // decode steps here
    return str;
}

我该怎么做?

1 个答案:

答案 0 :(得分:0)

通过逻辑思考:明文&#34; stackoverflow&#34;当表示为7位ASCII时,表示13位7位(= 91位)的信息。这是多长(64位)可以容纳。因此,您的编码将丢失信息,使解码变得不可能。

根据您使用的公式,这也应该很明显:

l = l * 47 + text.getBytes()[i] % 97;

对于每个字符,你得到一个0到96之间的数字(你已经在模数中丢失信息,将信息减少到97个可能的字符(例如,你不能再在模数之后区分字节1和98)。然后你乘以你的长数小于97(47),所以两个连续的字符在密文中的信息分布方面会重叠。 最后,在添加更多字符之后,long只会溢出而最顶端的位丢失。

总之:如果你想再次解码密文,请修复这三个地方的信息丢失。