Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.48 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6.  
  7. namespace BSK_01
  8. {
  9. internal class MatrixAdjustmentC : BaseAlgorithm
  10. {
  11. public override string Encrypt(string text, string key)
  12. {
  13. if (!Regex.IsMatch(key, @"^[a-zA-Z]+$"))
  14. throw new Exception("Klucz zawiera znaki niedozowlone");
  15. key = key.ToUpper();
  16. var keyTable = new int[key.Length];
  17. var alphabetCounter = 1;
  18. for (var i = 65; i <= 90; i++)
  19. for (var j = 0; j < key.Length; j++)
  20. {
  21. if (key[j] != i) continue;
  22. keyTable[j] = alphabetCounter;
  23. alphabetCounter++;
  24. }
  25.  
  26. var keyList = keyTable.ToList();
  27. var list = new List<char[]>();
  28. var textCounter = 0;
  29. for (var i = 1; i <= keyTable.Length; i++)
  30. {
  31. var index = keyList.FindIndex(x => x == i);
  32. var tmp = new char[key.Length];
  33. for (var z = 0; z < tmp.Length; z++)
  34. tmp[z] = '*'; //Ustawiane są wszędzie gwiazdki jako puste pola z powodu błędnego deszyfrowania wiadomości powodowanej przez '\0'
  35. for (var j = 0; j <= index; j++)
  36. {
  37. if (textCounter == text.Length)
  38. break;
  39. tmp[j] = text[textCounter];
  40. textCounter++;
  41. }
  42.  
  43. if (i == keyList.Max())
  44. i = 1;
  45. list.Add(tmp);
  46. if (textCounter == text.Length)
  47. break;
  48. }
  49.  
  50. var builder = new StringBuilder();
  51. for (var i = 1; i <= key.Length; i++)
  52. {
  53. var index = keyList.FindIndex(x => x == i);
  54. for (var j = 0; j < list.Count; j++)
  55. {
  56. if (list[j][index] != '*')
  57. builder.Append(list[j][index]);
  58. }
  59. }
  60.  
  61. return builder.ToString();
  62. }
  63.  
  64. public override string Decrypt(string text, string key)
  65. {
  66. if (!Regex.IsMatch(key, @"^[a-zA-Z]+$"))
  67. throw new Exception("Klucz zawiera znaki niedozowlone");
  68. key = key.ToUpper();
  69. var keyTable = new int[key.Length];
  70. var alphabetCounter = 1;
  71. for (var i = 65; i <= 90; i++)
  72. for (var j = 0; j < key.Length; j++)
  73. {
  74. if (key[j] != i) continue;
  75. keyTable[j] = alphabetCounter;
  76. alphabetCounter++;
  77. }
  78.  
  79. var keyList = keyTable.ToList();
  80. var list = new List<char[]>();
  81. var textCounter = 0;
  82.  
  83. for (var i = 1; i <= keyTable.Length; i++)
  84. {
  85. var index = keyList.FindIndex(x => x == i);
  86. var tmp = new char[key.Length];
  87. for (var j = 0; j <= index; j++)
  88. {
  89. if (textCounter == text.Length)
  90. break;
  91. tmp[j] = '.';
  92. textCounter++;
  93. }
  94.  
  95. if (i == keyList.Max())
  96. i = 1;
  97. list.Add(tmp);
  98. if (textCounter == text.Length)
  99. break;
  100. }
  101.  
  102. textCounter = 0;
  103. for (var i = 1; i <= keyTable.Length; i++)
  104. {
  105. var index = keyList.FindIndex(x => x == i);
  106. for (int j = 0; j < list.Count; j++)
  107. {
  108. if (list[j][index] == '.')
  109. {
  110. list[j][index] = text[textCounter];
  111. textCounter++;
  112. }
  113. }
  114. }
  115.  
  116. var builder = new StringBuilder();
  117. for (int i = 0; i < list.Count; i++)
  118. {
  119. for (int j = 0; j < list[i].Length; j++)
  120. builder.Append(list[i][j]);
  121. }
  122.  
  123. return builder.ToString();
  124. }
  125.  
  126. public override string KeyDescription()
  127. {
  128. return "Klucz jest ciągiem liter z wykluczeniem spacji, znaków specjalnych, ąśćń...";
  129. }
  130.  
  131. public override string ToString()
  132. {
  133. return "Przestawienia macierzowe C";
  134. }
  135. }
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement