这是我试图为其创建最佳解决方案的问题。我在[0 ... N]范围内有一组有限的非负整数。我需要能够将此集合中的每个数字表示为字符串,并且能够将此类字符串向后转换为原始数字。因此,这应该是一个双射函数。
附加要求是:
对于p.1和p.2,显而易见的解决方案是使用类似Base64(或适合所有值的BaseXXX)表示法。但是我们能以最少的努力适应p.3吗?常识告诉我,我还需要一个双射的“字符串字符串”函数用于BaseXXX值。有什么建议么?
或者也许有比BaseXXX更好的东西可以用来满足所有3个要求?
最佳答案
如果您不需要太安全,可以在BaseXXX中编码后使用简单的对称密码。例如,您可以选择整数[n₁,n2,n₃...]的键序列,然后使用Vigenere cipher。
密码的基本概念很简单-将每个字符C编码为C + K(mod 26),其中K是 key 中的一个元素。在进行过程中,只需从键中获取下一个字符的下一个数字,然后在键中的值用完后就自动换行。
这里确实有两个选择:您可以先将数字转换为baseXXX中的字符串,然后进行加密,或者可以使用相同的思想将每个数字加密为单个字符。在这种情况下,您需要将其从mod 26
更改为mod N + 1
。
想到这一点,一个更简单的选择是仅对键和值中的元素进行xor
。 (与使用Vigenere公式相反。)我认为这对于混淆也同样有效。