凯撒密码(C#)
本文关键字:密码 凯撒 | 更新日期: 2023-09-27 18:26:47
我想先说这是为了评估,所以我不希望你直接给我答案,我希望你给我指明正确的方向,稍微调整一下我所做的事情,或者告诉我应该做什么
我正试图创建一个凯撒密码来破译我们收到的一份文本文件。它需要在控制台中打印所有可能的转换,并将最后一个转换输出到文本文档中。我想稍后尝试将频率分析添加到其中,以找到正确的频率分析,但我现在有一些问题需要解决,然后才能做到这一点。
这就是我迄今为止所做的:
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.我不确定你的教练是否想要开始时的0班和结束时的26班中的一个或两个。你需要问。
同样,正确地进行操作,编写新代码只分析一行,并给它一些分数。让它正常工作。
现在计算所有线条的分数,并选出得分最高的线条。这应该是正确的答案。如果不是,那么你需要检查你的评分方法。
对一个非常简单的启动程序进行小的增量更改通常比直接从空白屏幕转到完整、复杂的程序要容易得多。逐渐增加复杂性,一次一个,边测试边测试。