String"函数-6ren"> String"函数-这是一个我正在尝试为其创建最佳解决方案的问题。我在 [0...N] 范围内有一组有限的非负整数。我需要能够将此集合中的每个数字表示为一个字符串,并能够将此类字符串向后转换为原始数字。所以这应该是一个双-6ren">
gpt4 book ai didi

algorithm - 双射 "Integer <-> String"函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:49:08 27 4
gpt4 key购买 nike

这是一个我正在尝试为其创建最佳解决方案的问题。我在 [0...N] 范围内有一组有限的非负整数。我需要能够将此集合中的每个数字表示为一个字符串,并能够将此类字符串向后转换为原始数字。所以这应该是一个双射函数。

附加要求是:

  1. 数字的字符串表示应至少在一定程度上混淆原始数字。所以像 f(x) = x.toString() 这样的原始解决方案将不起作用。
  2. 字符串长度很重要:越短越好。
  3. 如果知道 K 的字符串表示形式,我希望猜测 K+1 的字符串表示形式不是平凡的(在某种程度上)。

对于 p.1 和 p.2,显而易见的解决方案是使用类似 Base64(或适合所有值的任何 BaseXXX)表示法。但是我们可以用最少的额外努力适应 p.3 吗?常识告诉我,我还需要一个用于 BaseXXX 值的双射“String <-> String”函数。有什么建议么?或者也许有比 BaseXXX 更好的东西来满足所有 3 个要求?

最佳答案

如果您不需要它安全,您可以在 BaseXXX 编码后使用简单的对称密码。例如,您可以选择一个整数键序列 [n₁, n₂, n₃...] 然后使用 Vigenere cipher .

密码背后的基本思想很简单——将每个字符 C 编码为 C + K(mod 26),其中 K 是 key 中的一个元素。随着你的进行,只需从键中获取下一个字符的下一个数字,一旦键中的值用完就环绕。

这里你真的有两个选择:你可以先将数字转换为 baseXXX 中的字符串然后加密,或者你可以使用相同的想法将每个数字加密为单个字符。在这种情况下,您可能希望将其从 mod 26 更改为 mod N + 1

想一想,一个更简单的选择是对键和值中的元素进行xor。 (与使用 Vigenere 公式相反。)我认为这对于混淆也同样有效。

关于algorithm - 双射 "Integer <-> String"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8833075/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com