Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- namespace BSK_01
- {
- internal class MatrixAdjustmentC : BaseAlgorithm
- {
- public override string Encrypt(string text, string key)
- {
- if (!Regex.IsMatch(key, @"^[a-zA-Z]+$"))
- throw new Exception("Klucz zawiera znaki niedozowlone");
- key = key.ToUpper();
- var keyTable = new int[key.Length];
- var alphabetCounter = 1;
- for (var i = 65; i <= 90; i++)
- for (var j = 0; j < key.Length; j++)
- {
- if (key[j] != i) continue;
- keyTable[j] = alphabetCounter;
- alphabetCounter++;
- }
- var keyList = keyTable.ToList();
- var list = new List<char[]>();
- var textCounter = 0;
- for (var i = 1; i <= keyTable.Length; i++)
- {
- var index = keyList.FindIndex(x => x == i);
- var tmp = new char[key.Length];
- for (var z = 0; z < tmp.Length; z++)
- tmp[z] = '*'; //Ustawiane są wszędzie gwiazdki jako puste pola z powodu błędnego deszyfrowania wiadomości powodowanej przez '\0'
- for (var j = 0; j <= index; j++)
- {
- if (textCounter == text.Length)
- break;
- tmp[j] = text[textCounter];
- textCounter++;
- }
- if (i == keyList.Max())
- i = 1;
- list.Add(tmp);
- if (textCounter == text.Length)
- break;
- }
- var builder = new StringBuilder();
- for (var i = 1; i <= key.Length; i++)
- {
- var index = keyList.FindIndex(x => x == i);
- for (var j = 0; j < list.Count; j++)
- {
- if (list[j][index] != '*')
- builder.Append(list[j][index]);
- }
- }
- return builder.ToString();
- }
- public override string Decrypt(string text, string key)
- {
- if (!Regex.IsMatch(key, @"^[a-zA-Z]+$"))
- throw new Exception("Klucz zawiera znaki niedozowlone");
- key = key.ToUpper();
- var keyTable = new int[key.Length];
- var alphabetCounter = 1;
- for (var i = 65; i <= 90; i++)
- for (var j = 0; j < key.Length; j++)
- {
- if (key[j] != i) continue;
- keyTable[j] = alphabetCounter;
- alphabetCounter++;
- }
- var keyList = keyTable.ToList();
- var list = new List<char[]>();
- var textCounter = 0;
- for (var i = 1; i <= keyTable.Length; i++)
- {
- var index = keyList.FindIndex(x => x == i);
- var tmp = new char[key.Length];
- for (var j = 0; j <= index; j++)
- {
- if (textCounter == text.Length)
- break;
- tmp[j] = '.';
- textCounter++;
- }
- if (i == keyList.Max())
- i = 1;
- list.Add(tmp);
- if (textCounter == text.Length)
- break;
- }
- textCounter = 0;
- for (var i = 1; i <= keyTable.Length; i++)
- {
- var index = keyList.FindIndex(x => x == i);
- for (int j = 0; j < list.Count; j++)
- {
- if (list[j][index] == '.')
- {
- list[j][index] = text[textCounter];
- textCounter++;
- }
- }
- }
- var builder = new StringBuilder();
- for (int i = 0; i < list.Count; i++)
- {
- for (int j = 0; j < list[i].Length; j++)
- builder.Append(list[i][j]);
- }
- return builder.ToString();
- }
- public override string KeyDescription()
- {
- return "Klucz jest ciągiem liter z wykluczeniem spacji, znaków specjalnych, ąśćń...";
- }
- public override string ToString()
- {
- return "Przestawienia macierzowe C";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement