如何用C#[密码学]对句子进行编码

如何用C#[密码学]对句子进行编码,c#,cryptography,C#,Cryptography,我目前正在做一个练习,我应该创建两个函数。一个用来编码句子的符号。第二个用于解码另一个句子。这就像密码学 除了函数之外,我试图用一种简单的方法编写代码 以下是步骤: 读取用户正在键入的内容 将收到的字符串与字母表进行比较 当字母相似时,密码的命令起作用(字母向前移动8步) 例如: String Alphabet = "abcdefghijklmnopqrstuvwxyz"; Console.WriteLine("Indiquez votre phrase à encoder:"); string

我目前正在做一个练习,我应该创建两个函数。一个用来编码句子的符号。第二个用于解码另一个句子。这就像密码学

除了函数之外,我试图用一种简单的方法编写代码

以下是步骤:

  • 读取用户正在键入的内容
  • 将收到的字符串与字母表进行比较
  • 当字母相似时,密码的命令起作用(字母向前移动8步)
  • 例如:

    String Alphabet = "abcdefghijklmnopqrstuvwxyz";
    Console.WriteLine("Indiquez votre phrase à encoder:");
    string PhraseAEncoder = Console.ReadLine();
    Console.WriteLine(PhraseAEncoder);
    int PositionLettreFinale = 0;
    for (int i = 0; i < Alphabet.Length; i++)
    {
        if (PhraseAEncoder[i] == Alphabet[i])
        {
            PositionLettreFinale = Alphabet[i + 8]; // Je récupère la position finale.
            Console.WriteLine(PositionLettreFinale);
        }
        while (i != PositionLettreFinale)
        {
            i++;
            Console.WriteLine(Alphabet[i]);
        }
    }
    
    String Alphabet=“abcdefghijklmnopqrstuvxyz”;
    WriteLine(“Indiquez-votre短语a编码器:”);
    字符串phraseEncoder=Console.ReadLine();
    Console.WriteLine(短语编码);
    int PositionLettreFinale=0;
    for(int i=0;i
    它是用法语写的。但我想你可以得到它


    问题:我的for是无限的,我无法得到一个结果。

    代码无法工作。简单的“加密”方法示例:(基于您的代码)


    我在您的代码中看到两个主要问题:

    PositionLettreFinale=字母表[i+8]

  • 在这里,您可以访问
    字母表
    数组之外的元素(例如,当
    i
    等于24时,您将访问位于第32位的元素,而该元素不存在)

  • 同样在同一行中,您将为变量
    PositionLettreFinale
    类型
    int
    分配一个
    char
    类型的值

  • 当将
    char
    类型的值分配给
    int
    类型的变量时,它将根据以下条件转换为
    int

    现在,回答你的问题

    问题:我的for是无限的,我不能得到一个结果

    不是无限的,
    是无限的

    while(i!=PositionLettreFinale)


    您正在将
    i
    与十进制值
    char
    进行比较。它们永远不会相等,因为
    i
    的最大值为25(
    Alphabet.Length-1
    ),而
    positionletfinale
    的最小值为“a”(97)。

    您是否尝试过在调试器中单步执行代码?请比较Console.WriteLine和Console.Write方法。否,我将检查调试器。另外,昨天我只演了一个角色就成功了。但是作为一个字符串,这段代码不起作用。
    private static string Crypto(string PhraseAEncoder, int shift)
    {
      string Alphabet = "abcdefghijklmnopqrstuvwxyz";
      StringBuilder result = new StringBuilder(PhraseAEncoder.Length);
      foreach (char c in PhraseAEncoder)
      {
        int code = Alphabet.IndexOf(c);
        if (code < 0)
          result.Append(c);
        else
        {
          code += shift;
          if (code >= Alphabet.Length)
            code %= Alphabet.Length;
          else
          {
            while (code < 0)
              code += Alphabet.Length;
          }
          result.Append(Alphabet[code]);
        }
      }
      return result.ToString();
    }
    
    static void Main(string[] args)
    {
      Console.WriteLine("Indiquez votre phrase à encoder:");
      string PhraseAEncoder = Console.ReadLine().ToLower(); // alphabet is only in lowercase
      string result = Crypto(PhraseAEncoder, 8); // crypto password "8"
      Console.WriteLine(result);
      result = Crypto(result, -8);  // crypto reverse password "-8"
      Console.WriteLine(result);
      if (string.Equals(result, PhraseAEncoder))
        Console.WriteLine("OK");
      else
        Console.WriteLine("Error");
    }