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

Javascript 是否可以加密n位数字,返回唯一的n位数字?,javascript,encryption,Javascript,Encryption,StackOverflow警告我,我可能会在这个问题上被否决,但我很感激你不这么做,因为我发布这篇文章只是为了试图理解一个我一直在思考的编程练习 我正在做一些javascript编码练习,其中一项任务是设计一个“加密函数”encyphipher,它将一个4位数字乘以一个足够低的数字,这样它的数字就不会超过9,从而返回一个4位数字。因此 encipher(0204) 可能会让步 0408 乘法器应该是2这是非常基本的材料,只是为了练习Javascript但就我所见,返回的数字永远无法解密(这是

StackOverflow警告我,我可能会在这个问题上被否决,但我很感激你不这么做,因为我发布这篇文章只是为了试图理解一个我一直在思考的编程练习

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

encipher(0204)
可能会让步

0408
乘法器应该是
2
这是非常基本的材料,只是为了练习Javascript但就我所见,返回的数字永远无法解密(这是练习的下一部分)。即使您将字典存储在
encipher
的内部,也要遵循

{'0408':'2'}, etc
因此,您可以在
0408
上进行查找并返回
0204
,因此无法确保这些条目是唯一的。例如,如果一个人得到要解密的数字
9999
,他将永远不知道原始数字是
9999
(乘以1)、
3333
(乘以3)还是
1111
(乘以9)。对吗?我意识到这是一个相当愚蠢和人为的问题,但我试图理解练习的说明是否不完全正确,或者我是否遗漏了什么。这是最初的问题:

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

把这个练习抛在脑后,我只是好奇是否有任何方法可以“加密”(当我说“加密”时,我的意思是在一个中等的javascript级别,因为我不是一个密码专家)一个n位数字并返回一个唯一的n位数字

谢谢你的见解

通过将一个4位数字乘以一个足够低的数字进行加密,使其所有数字都不超过9,从而返回一个4位数字

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

相反,如果你在寻找某种双射算法(一种唯一地将A映射到B和B映射到A的算法),你可以考虑像向左或向右旋转数字、颠倒数字顺序或使用每个数字到另一个数字的唯一映射。这些也可以混合使用

示例

轮换

1234->2341

逆转

1234->4321

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

2323->8181

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

通过将一个4位数字乘以一个足够低的数字进行加密,使其所有数字都不超过9,从而返回一个4位数字

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

相反,如果你在寻找某种双射算法(一种唯一地将A映射到B和B映射到A的算法),你可以考虑像向左或向右旋转数字、颠倒数字顺序或使用每个数字到另一个数字的唯一映射。这些也可以混合使用

示例

轮换

1234->2341

逆转

1234->4321

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

2323->8181


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

您的加密包含一个密钥,用于加密和解密,在第一个示例中,您的密钥为2,取其并将每个数字乘以2,然后使用除法解密2,我能看到弹出的唯一问题是如果一个数字大于4会发生什么?那么它会创建一个超过1个数字的数字。如果你要发布一个益智问题,我建议以其原始形式发布该益智。rot13的rot5000版本?@IngoBürk,谢谢。我编辑了这篇文章以包含原始问题。@RyanWilson:是的,没错,但是要对任何数字都可用,乘法器必须是1,这在某种程度上消除了整个问题…这就是为什么我感到困惑。当然,这只是一个编程练习,但它让我好奇是否有办法做到这一点…你的加密持有一个密钥,这是用来加密和解密的,在你的第一个例子中,你的密钥是2,你拿它,然后将每个数字乘以2进行解密,然后可以使用除2,我能看到的唯一问题是如果一个数字大于4会发生什么?然后它会创建一个超过1个数字的数字。如果你要发布一个谜题,我建议以原始形式发布谜题。rot13的rot5000版本?@IngoBürk,谢谢。我编辑了发帖包含原始问题。@RyanWilson:是的,没错,但要与任何数字一起使用,乘法器必须是1,这在某种程度上消除了整个问题