public char getKey() {
kIdx = (kIdx + 1) % Key.Length;
return Key[kIdx];
}
public void Encryption() // Шифрование
{
kIdx = 0;
int length = PlainText.Length;
char[] Enc = new char[length];
int last_index = length - 1;
for (int i = 0; i < length; i++) {
Enc[last_index - i] = (char) (PlainText[i] + getKey() - i);
}
EncryptedText = new string(Enc);
}
public void Decryption() // Расшифровка
{
kIdx = 0;
int length = PlainText.Length;
char[] Dec = new char[length];
int last_index = length - 1;
for (int i = 0; i < length; i++) {
Dec[i] = (char) (EncryptedText[last_index - i] - getKey() + i);
}
PlainText = new string(Dec);
}
Ошибка при декодировании
Написал код, но при расшифровке, если входной текст больше 57 символов, появляется ошибка. В чем может быть дело?
Код:
public string getKey()
{
if (Key.Length == (kIdx + 1))
kIdx = -1;
kIdx++;
return Key[kIdx].ToString();
}
public void Encryption() // Шифрование
{
EncryptedText = "";
List<char> Enc = new List<char>();
for (int i = 0; i < PlainText.Length; i++)
{
Enc.Add ((char)(Convert.ToByte(PlainText[i]) + Convert.ToByte(getKey())- i));
}
char [] ch=Enc.ToArray();
for (int i = 0; i < PlainText.Length; i++)
{
EncryptedText += ch[i];
}
}
public void Decryption() // Расшифровка
{
PlainText = "";
List<char> Dec = new List<char>();
for (int i = 0; i < EncryptedText.Length; i++)
{
Dec.Add((char)(Convert.ToByte(EncryptedText[i]) - Convert.ToByte(getKey()) + i));
}
char[] ch = Dec.ToArray();
for (int i = 0; i < EncryptedText.Length; i++)
{
PlainText += ch[i];
}
}
{
if (Key.Length == (kIdx + 1))
kIdx = -1;
kIdx++;
return Key[kIdx].ToString();
}
public void Encryption() // Шифрование
{
EncryptedText = "";
List<char> Enc = new List<char>();
for (int i = 0; i < PlainText.Length; i++)
{
Enc.Add ((char)(Convert.ToByte(PlainText[i]) + Convert.ToByte(getKey())- i));
}
char [] ch=Enc.ToArray();
for (int i = 0; i < PlainText.Length; i++)
{
EncryptedText += ch[i];
}
}
public void Decryption() // Расшифровка
{
PlainText = "";
List<char> Dec = new List<char>();
for (int i = 0; i < EncryptedText.Length; i++)
{
Dec.Add((char)(Convert.ToByte(EncryptedText[i]) - Convert.ToByte(getKey()) + i));
}
char[] ch = Dec.ToArray();
for (int i = 0; i < EncryptedText.Length; i++)
{
PlainText += ch[i];
}
}
В .NET строки хранятся в кодировке Unicode. Иными словами, каждый символ строки - это джва байта.