Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在我的谜计划中切换角色_C#_Encryption - Fatal编程技术网

C# 在我的谜计划中切换角色

C# 在我的谜计划中切换角色,c#,encryption,C#,Encryption,因此,这将不是关于我所编写的特定代码,而是关于我的程序设计中出现的逻辑问题。这个程序基本上就是我的谜机版本 首先,它起作用了。我刚刚添加完最后一个特性,这是对机器插板的模拟;它添加了一个在加密过程中切换的字符对,这就是问题所在 假设我加密了TANIA这个词。它以GIAKE的名字出现 到目前为止还不错。但是我添加了一个开关;A=>I。加密工作正常,但当我解密时,它会尝试反转过程。塔尼亚的A是正确的,但I变成了A 看到问题了吗 解密过程无法区分切换的I和未切换的I。它在引擎盖下工作的方式是,在正常过

因此,这将不是关于我所编写的特定代码,而是关于我的程序设计中出现的逻辑问题。这个程序基本上就是我的谜机版本

首先,它起作用了。我刚刚添加完最后一个特性,这是对机器插板的模拟;它添加了一个在加密过程中切换的字符对,这就是问题所在

假设我加密了TANIA这个词。它以GIAKE的名字出现

到目前为止还不错。但是我添加了一个开关;A=>I。加密工作正常,但当我解密时,它会尝试反转过程。塔尼亚的A是正确的,但I变成了A

看到问题了吗

解密过程无法区分切换的I和未切换的I。它在引擎盖下工作的方式是,在正常过程之前切换字母

所以塔妮娅被转换成了蒂尼。然后正常加密。当它解密时,它会像它应该的那样出现TINII这个词,但随后开关会打开I,出现TANAA这个词

我希望我能弄清楚这一点。我一直在思考如何改变流程,但最终,同样的切换问题依然存在。有人知道如何解决这个问题吗

我可以提供代码本身,但我认为可能没有必要。不过请告诉我你是否真的想看。只是不想淹没我的帖子

编辑: 经过几次回复后,决定添加流程描述和代码本身的链接

字符串中的每个字符都是单独处理的,在程序移动到下一个字符之前,每个字符贯穿整个过程。所以T会先加密,然后是A,然后是N,依此类推

流程本身如下所示:

SWITCHES -> ROTOR 1 -> ROTOR 2 - ROTOR 3 -> OUTPUT
解密函数的方式相同,只是相反

ROTOR 3 -> ROTOR 2 -> ROTOR 1 -> SWITCHES -> OUTPUT
在处理每个字母后转动转子。第一个字符每转一圈,第一个字符完成一个完整循环后的第二个字符,第二个字符完成一个完整循环后的第三个字符

转子本身就是物体,上面有混乱的字母

作为一个例子,如果我们只是用一个开关T=>U来加密字母T,在程序内部,它看起来是这样的

T switched to U -> U becomes G -> G becomes K -> K becomes C -> output is C.
每次为每个字符运行此循环

守则:

谜 (这是实际的工作马)

RotorSets.cs

我很抱歉粘贴了整个代码,但我想不出应该粘贴哪些部分来说明问题。我之前的描述似乎仍然是描述问题本身的最佳方式


最后,代码不是很大,只是看起来很大,因为VS希望将每个括号都格式化到自己的行中,并且因为我喜欢写很多注释。

发布代码中说明问题的相关部分。问题似乎是您一次只应用一个字符替换,对于每次的整个字符串,当您需要做的是一次一个字符时,应用所有替换。也就是说,如果我明白你想做什么,我不确定我是否明白。谢谢你的回复。我编辑了原始的帖子,并添加了更多的说明和代码链接。我希望我能更好地理解我要做的事情和问题所在。