【发布时间】:2018-12-19 10:55:33
【问题描述】:
我目前正在开发一个程序,该程序通过用自定义预设字母替换特定字母来加密(使用凯撒密码)用户输入字符串。例如 A = R、B = T、C = O 等。
当前节目:
using System;
class Program
{
static void Main(string[] args)
{
String decryptedInput = Console.ReadLine().ToUpper();
String encryptedOutput = decryptedInput.Replace("A", "R")
.Replace("B", "B")
.Replace("C", "T")
.Replace("D", "O")
.Replace("E", "P")
.Replace("F", "M")
.Replace("G", "Z")
.Replace("H", "S")
.Replace("I", "J")
.Replace("J", "K")
.Replace("K", "I")
.Replace("L", "Y")
.Replace("M", "P")
.Replace("N", "G")
.Replace("O", "L")
.Replace("P", "V")
.Replace("Q", "C")
.Replace("R", "X")
.Replace("S", "N")
.Replace("T", "E")
.Replace("U", "H")
.Replace("V", "F")
.Replace("P", "A")
.Replace("X", "U")
.Replace("Y", "Q")
.Replace("Z", "D");
Console.WriteLine(encryptedOutput);
Console.ReadKey();
}
}
我确实得到了输出,但有一些加密错误。问题是,由于代码行一个接一个地运行,已经转换的字母会被再次转换。
例如:字母“A”被加密/转换为“R”。当程序到达字母“R”时,该字母被再次加密/转换并最终成为“X”,稍后在代码中转换为“U”。几乎每个字母都会发生这种情况,然后我得到一个加密文本,我永远无法解密。
有什么办法可以同时替换所有的字母,或者你会推荐我使用其他功能吗?
【问题讨论】:
-
字母之间是否存在循环映射?如果没有,那么您可以按转换顺序绘制所有字母,然后按倒序进行替换。但是看起来整个映射是一个圆圈。
-
使用
StringBuilder.Replace,而不是String.Replace。它在 StringBuilder 的缓冲区中进行替换。 String.Replace 在每个操作上创建一个新字符串(因为字符串是不可变的)。 -
bing.com/… 将为您提供更多版本的代码供您查看...
-
你在替换的两边都有
P而不是W,那不好。
标签: c# encryption replace caesar-cipher