当前位置: 首页 > 知识库问答 >
问题:

如何为凯撒密码同时替换多个字母?

耿俊
2023-03-14

当前方案:

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”。这几乎发生在每封信,然后我最终得到一个加密的文本,我永远无法解密。

有什么方法可以同时替换所有的字母,或者你会简单地建议我使用另一个函数吗?

共有1个答案

鞠侯林
2023-03-14

就像其他提到的,你替换了一些字符倍数时间。这可能不是期望的行为:

eg: A -> R -> X -> U

此外,在这些行中似乎有一个错别字:

.Replace("V", "F")
.Replace("P", "A")   // should this be W->A ?
.Replace("X", "U")

所有这些都可能导致了你的问题。

// build up character mappings for decryption
const string EncryptedLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const string DecryptedLetters = "RBTOPMZSJKIYPGLVCXNEHFAUQD";
var decryptionMapping = EncryptedLetters.Zip(DecryptedLetters, Tuple.Create)
    .ToDictionary(x => x.Item1, x => x.Item2);

// decrypt the message
var encryptedMessage = "CTHC";
var decryptedMessage = encryptedMessage
    .Select(x => decryptionMapping[x])
    .Aggregate(new StringBuilder(), (sb, x) => sb.Append(x), sb => sb.ToString());
 类似资料:
  • 我需要编写一个python、hacker和wow这些单词的加密文本,并且使用不包括使用RAW_INPUT的python中的凯撒密码,距离为3。这是我到目前为止,但我不断得到一个错误消息,我不知道如何修复它。

  • 问题内容: 我通过java进行了凯撒密码,它可以运行,但是在用户输入密钥后不对任何内容进行加密! 这是我的代码 跑: 问题答案: 使用效率不是很高…您可以对值进行整数运算以获得其索引。 我在代码中添加了注释以解释更多信息,但这就是我想出的。 输出应该是这样的

  • 基本上,我必须创建一个凯撒密码,它只是用一个int'k'以外的字母替换给出的每个字母。这需要2个命令行参数:“./caesar”和“k”,它们由用户提供。它工作得很好;但有一个问题: 它将“Barfoo”加密为“Eduirr”,使用3作为正确的密钥;将“Barfoo”加密为“Fevjss”,使用4作为正确的密钥 但是它不是用65作为密钥将“barfoo”加密为“onesbb”,而是将其加密为“oo

  • 因此,目前我的凯撒密码程序运行良好,每当我使用小写字母。但是,当我用大写输入一个单词或短语时,我想让它工作。这是我现在有的代码。希望你们能帮我完成这件事。 def encrypt(消息,距离):“”将获取消息并将其旋转到距离,以创建加密消息“” def decrypt(消息,距离):“”“将解密上面的消息”“” def binaryConversion(消息):“”“将把单词转换成二进制代码”“