我正在尝试加密java中的长字符串,长度为200到500个字符,加密/混淆(任何一个都适合我)字符串,我以后可以解密回原来的200 - 500个字符串。问题是我需要加密的字符串不超过32个字符(我希望加密的字符串能很好地适应控制台行)。任何人都可以帮我解决这个问题吗?如果还有一个?我正在寻找一段时间,只能找到像base64或AES那样输出字符串太长的东西..
答案 0 :(得分:4)
对于32个字符的每个可能的200个字符串,无法进行无损压缩。 这根本不可能。
了解这一点的示例: 假设我们只有ASCII:
200个字符,表示127 ^ 200个可能的200个字符
只有127 ^ 32个可能的长度为32的单词。 因此,不能存在将每个200个字符单词翻译成另一个32个字符单词的方法,如果您希望能够将其转换为200个字符单词(没有错误),则这是必要的。
数学说你要求的是不可能的。
答案 1 :(得分:4)
有256 ^ 200个可能的长度为200的字符串(假设您使用的是8位扩展ASCII字符0-255)。有256 ^ 32个可能的大小为32的字符串。
这意味着将任何200个字符串转换为32个字符的任何函数都不可避免地最终将多个输入字符串转换为相同的输出字符串 - 因为输出字符串可能太少(参见{{3 }})。
您可以轻松地提出将输入字符串映射到32个字符输出的散列函数,但由于多个字符串可能映射到相同的输出,因此无法反转该过程以获取输入字符串输出。