Тема: Шифр з автоключем.
Вирішив полазити по форуму, заглянув в смішні картинки а там таке... Ну короче я подумав що дійсно неможна просто так взяти і не запостити лабу на реплейсі.
// це сам метод
private string AuotkeyCipher(string text, string key)
{
AlfabetUtils.TextNormalize(ref text);
AlfabetUtils.TextNormalize(ref key);
string encrVector = (key + text).Substring(0, text.Length);
// if first symbol in key is valid cyrilllic symbol we use cyrillic decode otherwise latin.
bool isCyrillic = key[0].ToString(CultureInfo.InvariantCulture)
.IndexOfAny(AlfabetUtils.CyrillicAlfabet.ToCharArray()) > -1;
string result = string.Empty;
for (int i = 0; i < text.Length; i++)
result += AlfabetUtils.GetDecrCharFrom2Chars(text[i], encrVector[i], isCyrillic);
return result;
}
// а це службовий клас
public static class AlfabetUtils
{
public static readonly string LatinAlfabet = "abcdefghijklmnopqrstuvwxyz";
public static readonly string CyrillicAlfabet = "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя";
public static char GetDecrCharFrom2Chars(char originChar, char shiftChar, bool isCyrylicText)
{
string searchChars = isCyrylicText ? CyrillicAlfabet : LatinAlfabet;
if (originChar.ToString(CultureInfo.InvariantCulture).IndexOfAny(searchChars.ToCharArray()) > -1
&& shiftChar.ToString(CultureInfo.InvariantCulture).IndexOfAny(searchChars.ToCharArray()) > -1)
{
int originIndex = searchChars.IndexOf(originChar);
int shiftIndex = searchChars.IndexOf(shiftChar);
int resultIndex = originIndex + shiftIndex - 1 > searchChars.Length
? (originIndex + shiftIndex) % searchChars.Length
: originIndex + shiftIndex;
return searchChars[resultIndex];
}
return originChar;
}
public static void TextNormalize(ref string text)
{
string suportedChars = LatinAlfabet + CyrillicAlfabet;
text = text.Where(c => c.ToString(CultureInfo.InvariantCulture).IndexOfAny(suportedChars.ToCharArray()) > -1)
.Aggregate(string.Empty, (current, c) => current + c);
}
}
Надіюсь комусь поможе зекономити пару годин свого часу. В мене ще є парочка лаб по теорії шифрування інформацїї як тільки дороблю викладу сюди.