是否可以加密 n 位数字,返回唯一的 n 位数字?



StackOverflow警告我,我可能会对这个问题投反对票,但我希望你不要这样做,因为我发布这个只是为了试图理解我提出的一个编程练习,我已经困惑了一段时间。

我正在做一些javascript编码练习,其中一项任务是设计一个"加密函数",encipher,它将通过将4位数字乘以足够低的数字来加密它,这样它的数字都不会超过9,因此返回一个4位数字。 因此

encipher(0204)

可能会产生

0408

乘数本来是2的地方. -- 这是非常基本的材料,只是为了练习 Javascript。--但据我所知,返回的数字永远无法破译(这是练习的下一部分(。 即使您在encipher内部存储字典,也可以按照

{'0408':'2'}, etc

为了让您可以对0408进行查找并返回0204,这些条目不能保证是唯一的。 例如,如果要破译数字9999,人们永远不会知道原始数字是9999(乘以1(,3333(乘以3(还是1111(乘以9(。这是对的吗? 我意识到这是一个相当愚蠢和人为的问题,但我试图理解练习的说明是否不太正确,或者我是否遗漏了什么。 这是原始问题:

现在,让我们再添加一个安全级别。更改数字的位置后,我们将每个成员乘以乘法不超过 10 的数字。(如果它大于 10,我们将得到两位数的乘法,代码将不再是 4 个值(。 现在,在另一个函数中实现解密器 ((,它将接收加密代码作为参数(并在上一节中相应地相乘并返回解密的代码。

抛开练习,我只是好奇是否有任何方法可以"加密"(当我说"加密"时,我的意思是在中等的 JavaScript 级别,因为我不是密码学专家(一个 n 位数字并返回一个唯一的 n 位数字?

感谢您的任何见解。

通过将

4 位数字乘以足够低的数字来加密它,使其任何数字都不超过 9,因此返回 4 位数字

如果您的输入是 9999,则除了 1 或 0 之外,没有其他整数可以将输入乘以并获得最多 4 位的正数。因此,没有只涉及整数乘法的解决方案。但是,整数乘法可以用作算法的一部分,例如旋转数字(见下文(。

相反,如果你正在寻找某种双射算法(一种唯一地将A映射到B和B到A的算法(,你可以看看一些东西,比如向左或向右旋转数字,反转数字的顺序,或者使用每个数字到另一个数字的唯一映射。这些也可以混合使用。

例子

旋转

1234年->2341

年反向

1234->4321

重新映射数字,例如 2 映射到 8,3 映射到 1

2323->8181

请注意,这些都不是加密信息的加密方法,但它们似乎或多或少地满足了练习的目标。

最新更新