【问题标题】:Input string compressed as string输入字符串压缩为字符串
【发布时间】:2009-09-29 16:06:39
【问题描述】:

我想将一个字符串压缩/转换为新字符串。

即: 输入字符串:

USERNAME/REGISTERID

压缩后的输出字符串:

<some-string-in-UTF8-format>

解压后输出字符串:

USERNAME/REGISTERID

这种转换有一些压缩或散列方法吗?

我更喜欢使用 Java 的解决方案或具有基本流程步骤的算法。

我已经阅读并尝试使用 Huffman 转换,但压缩输出由出站 UTF-8 字符集的字节组成。

【问题讨论】:

    标签: java string utf-8 compression huffman-code


    【解决方案1】:

    你可以使用ZipOutputStream。

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

    您只需要找出正确的字符串编码。这种情况可以通过Base64 representation 完成。

    【讨论】:

      【解决方案2】:

      看看Base64、commons-codec等。

      Commons-code 提供了一个非常简单的Base64 class 来使用。

      您不能使用散列函数,因为散列函数通常是单向的:即给定一个 MD5 或 SHA1 散列,您应该无法对其进行解码以找出源消息是什么。

      【讨论】:

      • 真的,哈希函数是单向的。谢谢!和过去
      • @matt:可以为此目的使用散列函数,即使它是单向函数,您只需在服务器端保留一些持久性结构(数据库、文件等)用户/注册ID的键中使用的反向对应字符串......好吧,如果你这样做,它甚至可以是随机选择的数字或字符串。
      【解决方案3】:

      见iconv 和mb_convert_encoding。对于编码,可以考虑base64_encode。

      【讨论】:

        【解决方案4】:

        如果您的标识符有数据库ID,正如您的名字所暗示的那样,为什么不使用这个数字作为编码呢? (如果你愿意,可以把它作为字符串)。

        您不应该希望使用压缩算法获得更好的压缩,因为它们都需要一些标头,并且标头本身的大小可能比您的输入字符串长。

        【讨论】:

        • 我没有密钥数据库。压缩不是为了减少数据传输,而是对原始数据进行简单而幼稚的混淆。谢谢,过去
        【解决方案5】:

        似乎有人要求您混淆用户名/密码组合。这可能不是一个好主意,因为它暗示了没有安全性的地方。您不妨为此实施 ROT13 加密,并使用双 ROT13 进行解密。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-25
          • 1970-01-01
          • 2011-08-18
          • 2015-12-14
          • 2019-10-04
          相关资源
          最近更新 更多