在我的enigma项目中切换字符

时间:2016-02-12 14:39:38

标签: c# encryption

因此,对于我编写的特定代码而言,这将更少,而且更多的是我的程序设计中出现的逻辑问题。该程序基本上是我的enigma机器版本。

首先,它有效。我刚刚添加了最后一个功能,即模拟机器的插板;它会添加在加密过程中切换的字符对,这就是问题所在。

让我们说我加密了TANIA这个词。它出现在GIAKE。

到目前为止一切顺利。但后来我添加了一个开关; A => I.加密工作正常但是当我解密时会发生的事情是它试图扭转这个过程。 TANIA中的A是正确的,但是我变成了A。

看到问题?

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

所以TANIA通过交换机变成了TINII。然后它正常加密它。当它解密时,它会出现TINII这个词,就像它应该的那样,但是然后开关转动了I,提出了TANAA这个词。

我希望能够清楚这一点。我一直在考虑如何改变这个过程,但最终,同样的转换问题仍然存在。有人知道如何解决这个问题吗?

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

修改 经过几次回复,决定添加流程描述和代码本身的链接。

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

流程本身如下:

SWITCHES -> ROTOR 1 -> ROTOR 2 - ROTOR 3 -> OUTPUT

解密功能的方式相同,只是反向

ROTOR 3 -> ROTOR 2 -> ROTOR 1 -> SWITCHES -> OUTPUT

处理完每个字母后转动转子。第一个转向与每个字符,第二个在第一个完成一个完整周期后,第三个在第二个完成一个完整周期后。

转子本身就是物体,拿着乱七八糟的字母。

因此,作为一个例子,如果我们只是加密字母T,使用Switch T => U.在程序中,它看起来像这样。

T switched to U -> U becomes G -> G becomes K -> K becomes C -> output is C.

一次为每个角色运行此循环。

代码:

Enigma.cs http://pastebin.com/E3Ytxdg6(这是实际的工作马)

RotorSets.cs http://pastebin.com/7U6TiP9a

我为粘贴整个代码而道歉,但我想不出要粘贴哪些部分会证明问题。我之前的描述似乎仍然是描述问题本身的最佳方式。

最后代码不是很大,但只是看起来很大,因为VS希望将每个括号格式化为自己的行,因为我喜欢写很多评论。

0 个答案:

没有答案