-6

我正在制作一个自定义加密/解密软件。我已经写了代码:

    public int CountCharInStringAccordingToArray(string Text)
    {
        int Count = 0;
        foreach (char x in Text)
        {
            Count++;
        }
        return Count - 1;
    }

    public int CountCharInString(string Text)
    {
        int Count = 0;
        foreach (char x in Text)
        {
            Count++;
        }
        return Count;
    }
    public string Encrypt(string Key, string PlainText)
    {
        int[] TempKey = new int[CountCharInString(Key)];
        int[] TempText = new int[CountCharInString(PlainText)];
        int[] EncryptedInt = new int[CountCharInString(PlainText)];
        char[] EncryptedChar = new char[CountCharInString(PlainText)];
        for (int i = 0; i < CountCharInStringAccordingToArray(Key); i++)
        {
            TempKey[i] = (int)Key[i];
        }
        for (int i = 0; i < CountCharInStringAccordingToArray(PlainText); i++)
        {
            TempText[i] = (int)PlainText[i];
        }
        int Index = 0;
        for (int i = 0; i < CountCharInStringAccordingToArray(PlainText); i++)
        {
            if (Index == CountCharInStringAccordingToArray(Key))
            {
                Index = 0;
            }
            EncryptedInt[i] = TempKey[Index] + TempText[i];
            Index++;
            EncryptedChar[i] = (char)EncryptedInt[i];
        }
        return new string(EncryptedChar);
    }

    public string Decrypt(string Key, string EncryptedText)
    {
        int[] TempKey = new int[CountCharInString(Key)];
        int[] TempText = new int[CountCharInString(EncryptedText)];
        int[] DecryptedInt = new int[CountCharInString(EncryptedText)];
        char[] DecryptedChar = new char[CountCharInString(EncryptedText)];
        for (int i = 0; i < CountCharInStringAccordingToArray(Key); i++)
        {
            TempKey[i] = (int)Key[i];
        }
        for (int i = 0; i < CountCharInStringAccordingToArray(EncryptedText); i++)
        {
            TempText[i] = (int)EncryptedText[i];
        }
        int Index = 0;
        for (int i = 0; i < CountCharInStringAccordingToArray(EncryptedText); i++)
        {
            if (Index == CountCharInStringAccordingToArray(Key))
            {
                Index = 0;
            }
            DecryptedInt[i] = TempText[i] - TempKey[Index];
            Index++;
            DecryptedChar[i] = (char)DecryptedInt[i];
        }
        return new string(DecryptedChar);
    }

但我的问题是当我加密时:

键 = abc123

PlainText = 大家好,你们好吗?

加密结果:§ÑÕ

当我解密时:

键 = abc123

加密文本 = §ÑÕ

解密结果:゚゙ンᅥ

当我解密加密文本时,我得到的东西与“大家好,你们好吗?”完全不同。

有人可以帮忙吗?提前致谢。

4

1 回答 1

0

虽然其他人已经说了很多,但代码中的实际问题是在 Encrypt 和 Decrypt 函数中使用属性“Text”。在您的函数标头中,输入参数是“PlainText”和“EncryptedText”,但在您的函数主体中,您试图使用“Text”来引用它们。Text 属性属于程序的主窗口 - 无论您放入的实际文本如何,您的 Encrypt 和 Decrypt 函数都对该文本执行它们的操作。

作为 C# 中的一般规则,尽量不要让局部变量以大写字母开头。以大写字母开头的名称通常保留给属性和方法。正如您从代码中的错误中看到的那样,您引用的属性与您期望的变量完全不同。采用骆驼大小写之类的命名方案将避免此类无意引用,并允许调试器在您犯了此类错误时告诉您。

于 2013-03-18T02:46:52.403 回答