我有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);
}
}
}
答案 0 :(得分:0)
我唯一能想到的就是循环原始的char数组并保存每个空间的索引,然后将其添加到最后,有点醒来,所以可能是更好的解决方案。还想知道为什么你没有空格
答案 1 :(得分:0)
不应该是这段代码
$params
要
if (buffer[i] > 'Z')
{
buffer[i] = (char)(buffer[i] - 26);
}
在解密功能中? 检查它是否小于A或a,因为你从中减去了键。 也不要替换代码中的空格。只是对它们进行加密并对它们进行解密,它们将保留,即除非你保留索引信息,否则无法恢复空间。!