可以加一个n位数字,返回一个唯一的n位数字吗?

时间:2018-06-06 17:38:40

标签: javascript encryption

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

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

encipher(0204)

可能会产生

0408

乘数应为2。 - 这是非常基本的材料,只是练习Javascript。 - 但据我所知,返回的数字永远不会被破译(这是练习的下一部分)。即使您将encipher内部的字典存储在

的行中
{'0408':'2'}, etc

这样您就可以对0408进行查找并返回0204,这些条目无法保证是唯一的。例如,如果要将数字9999解密,则永远不会知道原始数字是9999(乘以1),3333(乘以3)还是{ {1}}(乘以9)。那是对的吗?我意识到这是一个相当愚蠢和人为的问题,但我试图理解练习的指示是不是很正确,或者我是否遗漏了某些东西。这是最初的问题:

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

将练习抛在后面,我只是好奇是否有任何方法来加密" (当我说"加密",我的意思是在一个温和的javascript级别,因为我不是加密专家)一个n位数字并返回一个唯一的n位数字?

感谢您的任何见解。 -

1 个答案:

答案 0 :(得分:2)

  

通过将4位数字乘以足够低的数字来加密,使其数字不超过9,以便返回4位数字

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

如果您正在寻找某种双射算法(一个将A到B和B唯一映射到A的算法),您可以查看向左或向右旋转数字,反转数字顺序,或者使用每个单独数字到另一个数字的唯一映射。那些也可以混合。

<强>实施例

旋转

1234 - &gt; 2341

反向

1234 - &gt; 4321

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

2323 - &gt; 8181

请注意,这些都不是用于加密信息的加密方法,但它们似乎或多或少都符合练习的目标。