Много елегантно решение Браво.
Но преди да погледна твоето ето какво сътворих. Не е най-гениалното, но става. Разбито на много стъпки и по дълго разбира се. Така ги разбирам нещатата така ги правя :)
Решение:
http://pastebin.com/NxsRV5P4
Обяснение:
1. Създавам променливи str и key. Присвоявам им някакъв текст. Като key ще ми е ключът с който ще шифровам и дешифровам.
2. Правя си метод за шифроване Encrypt(string str, string key) , който има дадените параметри и връща string. Създавам си 2-а char[ ], с дължината на текста str.Length съответно keyArr и strArr, като на единия му присвоявам текста, а на другия ключа. Също така си създавам и променливата encrypted със StringBuilder-a.
3. Тук се опитвам да направя еднакви по дължина текста и ключа, като ключът ако не е с дължината на текста, го правя с такава дължина като, самият ключ се повтаря докато не достигне желаната дължина. За целта пускам един for цикъл до strArr.Length. Самият for цикъл има две водещи променливи, като едната "i" работи върху индексите и съответно дължината, а другата "к" върху ключа. Когато "к" стигне дължината на оригиналният ключ тогава к=0; идеята е да започне записва ключът отначало и така докато новият ключ не стане с дължината на текста.
Пример:
str = "малко текст за шифроване" str.Length = 24
key = "шифърключ" - оригинален ключ
key = "шифърключшифърключшифърк" - готов за използване с XOR
4. Тук пускам втори for цикъл пак до strArr.Length. И долепям резултата в encrypted с метода .Append()
ВНИМАНИЕ това което е в синьо трябва да задължително в скоби, един вид резултат от XOR на двете стойности да бъде преобразувана след това в char(звездичка, нота, сърце какъвто се падне). Казвам го защото аз брах големи ядове като нямаше скоби :), защото първо се изпълняваше преобразуването на (char)(strArr[i] и резултата XOR с keyArr[i] . Което даваше някакви глупости като резултат.
ЕТО ЗАЩО ТРЯБВА ДА СЕ ЗНАЯТ ПРИОРИТЕТИ НА ОПЕРАТОРИТЕ :)
Пример:
encrypted.Append((char)(strArr[i] ^ keyArr[i]));
5. Накрая на метода return encrypted.ToString(); резултатa го присвоявам на нова променлива от тип string encrypted
6. Decrypt дешофроването става по същият начин като шифроването само че на мястото на текста подавам вече шифрованият текс
Асси