我正在尝试将Java中的长字符串(长度为200-500个字符)加密为加密/混淆(任何一个都对我有用)字符串,我稍后可以将其解密回原始的200-500个字符串。问题是我需要加密字符串不超过 32 个字符(我希望加密字符串很好地适合控制台行)。任何人都可以帮我解决这个问题..?如果有的话?我搜索了一段时间,只能找到像 base64 或 AES 这样的输出字符串太长的东西。
问问题
1369 次
2 回答
4
没有办法对 32 个字符中的每个可能的 200 个字符串进行无损压缩。这简直是不可能的。
理解这一点的示例:假设我们只有 ASCII:
200 个字符,这意味着 127^200 个可能的 200 个字符单词
只有 127^32 个可能的长度为 32 的单词。因此,不存在将每个 200 个字符的单词翻译成另一个 32 个字符的单词的方法,如果您希望能够将它包转换为 200 个字符的单词,这将是必要的(没有错误)
数学说,你要求的东西是不可能的。
于 2012-12-28T00:07:03.907 回答
4
有 256^200 个可能的长度为 200 的字符串(假设您使用 8 位扩展 ASCII 字符 0-255)。有 256^32 个可能的大小为 32 的字符串。
这意味着任何将任何 200 个字符的字符串转换为 32 个字符的函数的任何函数,最终都将不可避免地将多个输入字符串转换为相同的输出字符串——因为可能的输出字符串太少了(参见鸽洞原理)。
您可以很容易地想出一个将输入字符串映射到 32 个字符的输出的散列函数,但是由于多个字符串可能映射到相同的输出,因此不可能反转该过程以在给定输出的情况下获取输入字符串。
于 2012-12-28T00:14:24.033 回答