Шифр Виженера: неверный результат шифрования символов - C#
Формулировка задачи:
private static int smesh = (int)'a';//смещение алфавита относительно таблицы юникодов
private static int alphLength = 26;
public static string Encrypt(String text, String key)
{
StringBuilder ans = new StringBuilder();
for (int i = 0; i < text.Length; i++)
{
int num = (text[i] + key[i % key.Length] - 2 * smesh) % alphLength;
//в num лежит номер буквы в алфавите
char simvol = (char)(num + smesh);//получаем нужный символ
ans.Append(simvol);
}
return ans.ToString();
}
public static string Decrypt(String res, String key)
{
StringBuilder ans = new StringBuilder();
for (int i = 0; i < res.Length; i++)
{
int num = (res[i] - key[i % key.Length] + alphLength) % alphLength;
//обратные преобразования с номером буквы в алфавите
char c = (char)(num + smesh);
ans.Append(c);
}
return ans.ToString();
}Решение задачи: «Шифр Виженера: неверный результат шифрования символов»
textual
Листинг программы
{
private static int smesh = (int)'a';//смещение алфавита относительно таблицы юникодов
private static int alphLength = 26;
static char[] ExceptSymbols = { 'a', 'b', 'c', 'd', 'e' }; // и такк все буквы
public static string Encrypt(String text, String key)
{
StringBuilder ans = new StringBuilder();
for (int i = 0; i < text.Length; i++)
{
if (!ExceptSymbols.Contains(text[i]))
{
ans.Append(text[i]);
}
else
{
int num = (text[i] + key[i % key.Length] - 2 * smesh) % alphLength;
//в num лежит номер буквы в алфавите
char simvol = (char)(num + smesh);//получаем нужный символ
ans.Append(simvol);
}
}
return ans.ToString();
}