我想通过说这是一个评估作为开头,所以我不希望您直接给我答案,我希望您指出正确的方向,稍微调整一下我所做的事情,或者只是告诉我我应该考虑做些什么。
我正在尝试创建凯撒密码来解密我们收到的文本文档。它需要在控制台中打印所有可能的班次并将最后的班次输出到文本文档。我正在考虑稍后再对此进行频率分析以找到正确的方法,但是现在遇到了一些问题,需要对此进行整理。
这是我到目前为止所做的:
using System;
using System.IO;
class cipher
{
public static void Main(string[] args)
{
string output = "";
int shift;
bool userright = false;
string cipher = File.ReadAllText("decryptme.txt");
char[] decr = cipher.ToCharArray();
do {
Console.WriteLine("How many times would you like to shift? (Between 0 and 26)");
shift = Convert.ToInt32(Console.ReadLine());
if (shift > 26) {
Console.WriteLine("Over the limit");
userright = false;
}
if (shift < 0) {
Console.WriteLine("Under the limit");
userright = false;
}
if (shift <= 26 && shift >= 0)
{
userright = true;
}
} while (userright == false);
for (int i = 0; i < decr.Length; i++)
{
{
char character = decr[i];
character = (char)(character + shift);
if (character == '\'' || character == ' ')
continue;
if (character > 'Z')
character = (char)(character - 26);
else if (character < 'A')
character = (char)(character + 26);
output = output + character;
}
Console.WriteLine("\nShift {0} \n {1}", i + 1, output);
}
StreamWriter file = new StreamWriter("decryptedtext.txt");
file.WriteLine(output);
file.Close();
}
}
现在它可以编译并读取文档,但是当它在控制台中运行时,它会从编码文本中将移位1作为1个字母打印,将移位2作为2个字母进行打印,依此类推。
我不知道我做错了什么,任何帮助将不胜感激。我也已经开始考虑字母的ASCII值,但不知道如何实现。
再一次,请不要只是给我答案,否则我将不会从中学到任何东西,而我一直在努力破解自己,但没有运气。
谢谢。
最佳答案
将问题分解为较小的小块。首先打印一条移位的行,例如移位1。
当您的那部分正常工作(并且只有这样)时,才能扩展您的代码以打印26行,其班次为0、1、2、3,... 26。起点和终点26。您将需要询问。
再次,使该代码正常工作,并编写新代码以仅分析一行,并为其打分。使它正常工作。
现在计算所有行的分数,并选择得分最高的行。那应该是正确的答案。如果不是,那么您将需要检查您的计分方法。
与尝试从黑屏直接转到完整,复杂的程序相比,向非常简单的启动程序编写小的增量更改通常要容易得多。逐步添加复杂性,一次一次,随身进行测试。
关于c# - 凯撒密码(C#),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34288870/