加密/解密崩溃

本文关键字:崩溃 解密 加密 | 更新日期: 2023-09-27 18:24:19

我必须为我的C#介绍类编写一个"加密"程序。我遇到两个问题:

  1. 当在解密过程中输入负数或计算负数时,它会崩溃。-它返回未处理的异常错误:System.FormatException:输入字符串的格式不正确
  2. 解密应该与加密相反,而不使用原始变量。如何反转余数计算

我知道这是do-while循环的一部分,我只是不知道如果输入了负数,以及在解密计算过程中遇到了什么情况,如何继续提示输入值,以防止它崩溃。任何指导都将不胜感激。谢谢你看一看!

public class MainClass
{
  public static void Main(string[] args)
    {
    int num = 0;
    int dnum = 0;
      do
      {
      Console.Write("Please enter a non-negative integer to encrypt: ");
  num = Convert.ToInt32(Console.ReadLine());
      string numstr = Convert.ToString(num);
      string num1 = Convert.ToString(numstr.Substring(0, 1));
      string num2 = Convert.ToString(numstr.Substring(1, 1));
      string num3 = Convert.ToString(numstr.Substring(2, 1));
      string num4 = Convert.ToString(numstr.Substring(3, 1));
      int enum1 = ((Convert.ToInt32(num1) + 7) % 10);
      int enum2 = ((Convert.ToInt32(num2) + 7) % 10);
      int enum3 = ((Convert.ToInt32(num3) + 7) % 10);
      int enum4 = ((Convert.ToInt32(num4) + 7) % 10);
      Console.WriteLine("Encrypted Integer: {0:D4}", (1000 * enum3 + 100 * enum4 + 10 * enum1 + enum2));
      Console.Write("Please enter a non-negative integer to decrypt: ");
      dnum = Convert.ToInt32(Console.ReadLine());
      string dnumstr = Convert.ToString(dnum);
      string num1d = Convert.ToString(dnumstr.Substring(0, 1));
      string num2d = Convert.ToString(dnumstr.Substring(1, 1));
      string num3d = Convert.ToString(dnumstr.Substring(2, 1));
      string num4d = Convert.ToString(dnumstr.Substring(3, 1));
      int dnum1 = ((Convert.ToInt32(num1d) - 7) * 10);
      int dnum2 = ((Convert.ToInt32(num2d) - 7) * 10);
      int dnum3 = ((Convert.ToInt32(num3d) - 7) * 10);
      int dnum4 = ((Convert.ToInt32(num4d) - 7) * 10);
      Console.WriteLine("Decrypted Integer: {0:D4}", (1000 * dnum1 + 100 * dnum2 + 10 * dnum3 + dnum4));
        } while (num > 0);
   } // end Main
}// end class

加密/解密崩溃

策略是,在用户输入"正确"输入之前不要继续。这里是代码示例,请注意,我使用numstr[0](一个索引)来获取第一个字符,而不是numstr.Substring(0, 1),这样代码看起来更干净。

        int num = 0;
        bool isValid = false;
        do
        {
            Console.Write("Please enter 4 digits to encrypt: ");
            string numstr = Console.ReadLine();
            if (numstr.Length == 4)
            {
                isValid = Char.IsDigit(numstr[0]) && Char.IsDigit(numstr[1]) 
                       && Char.IsDigit(numstr[2]) && Char.IsDigit(numstr[3]);
            }
            if (isValid)
                num = Convert.ToInt32(input);
        }
        while (!isValid);

至于您的第二个问题,您不能使用乘法来反转余数计算((d+7)%10),您应该再次使用余数运算符(d+10-7)%10,添加额外的10以防止得到负结果。

解密过程中还有另一个错误,您可以向调试器寻求帮助。