如何从字符串中删除已删除的空格

时间:2017-07-05 13:41:06

标签: c# winforms encryption caesar-cipher

我有windows表单应用程序加密字符串并解密 它使用凯撒算法。在加密字符串时,我必须从中删除空格,但是当我再次解密它时,我应该将删除的空格带回实际位置。

在这种情况下我遇到的问题是从加密字符串中删除空格,并且在解密时,有些字母被更改为特殊字符,如加密密钥为3的此模式:

纯文字:我的名字是Shafaq Zahir
加密文本:PbqdphlvVkdidtCdklu
解密文本:M_nameisShafaq @ ahir

这是我的代码

class CaesarAlgorithm
    {
        public string Encrypt(string pt,int key)
        {
            char[] buffer = pt.Replace(" ",string.Empty).ToCharArray();
            //char[] buffer = pt.ToCharArray();
            for(int i=0;i<buffer.Length;i++)
            {
                if (buffer[i] >= 'a' && buffer[i] <= 'z')
                {
                    buffer[i] = (char)(buffer[i] + key);
                    if (buffer[i] > 'z')
                    {
                        buffer[i] = (char)(buffer[i] - 26);
                    }
                }
                else if (buffer[i] >= 'A' && buffer[i] <= 'Z')
                {
                    buffer[i] = (char)(buffer[i] + key);
                    if (buffer[i] > 'Z')
                    {
                        buffer[i] = (char)(buffer[i] - 26);
                    }
                }
            }

            return new string (buffer);

        }

        public string Decrypt(string pt,int key)
        {
            char[] buffer = pt.ToCharArray();
            for (int i = 0; i < buffer.Length; i++)
            {
                if (buffer[i] >= 'a' && buffer[i] <= 'z')
                {
                    buffer[i] = (char)(buffer[i] - key);
                    if (buffer[i] > 'z')
                    {
                        buffer[i] = (char)(buffer[i] - 26);
                    }
                }
                else if (buffer[i] >= 'A' && buffer[i] <= 'Z')
                {
                    buffer[i] = (char)(buffer[i] - key);
                    if (buffer[i] > 'Z')
                    {
                        buffer[i] = (char)(buffer[i] - 26);
                    }
                }
            }

            return new string(buffer);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

我唯一能想到的就是循环原始的char数组并保存每个空间的索引,然后将其添加到最后,有点醒来,所以可能是更好的解决方案。还想知道为什么你没有空格

答案 1 :(得分:0)

不应该是这段代码

$params

if (buffer[i] > 'Z')
 { 
buffer[i] = (char)(buffer[i] - 26);
 }

解密功能中? 检查它是否小于A或a,因为你从中减去了键。 也不要替换代码中的空格。只是对它们进行加密并对它们进行解密,它们将保留,即除非你保留索引信息,否则无法恢复空间。!