Shifr.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace proba
  7. {
  8. class Shifr
  9. {
  10. public int p;// Первое простое число
  11. public int q;// Второе простое число
  12. public int n;// Модуль просых чисел
  13. public int e;// Открытый ключ
  14. public int d;// Закрытый ключ
  15. public static string phraze;
  16. public static int[] codePhraze;// Зашифрованная фраза
  17. public static char[] decoding;// Расшифрованная фраза
  18. public Shifr()
  19. {
  20. p = 193;
  21. q = 73;
  22. n = p * q;
  23. e = 257;
  24. d = 75521;
  25. }
  26. public void ShifrCode()
  27. {
  28. codePhraze = code(phraze, e, n);
  29. }
  30. public void ShifrDecode()
  31. {
  32. decoding = decode(codePhraze, d, n);
  33. }
  34. public int isSimple(int number)// Определяет, простое число или нет
  35. {
  36. if (number == 1) return 0;
  37. for (int i = 2; i <= Math.Sqrt(number); i++)
  38. {
  39. if (number % i == 0) return 0;
  40. }
  41. return 1;
  42. }
  43. public int ostat(int x, int y, int z)// Остаток от деления x^y на z
  44. {
  45. int ost = x;
  46. for (int i = y - 1; i > 0; i--)
  47. {
  48. ost = (ost * x) % z;
  49. }
  50. return ost;
  51. }
  52. public int[] code(string c, int e, int n)// Кодирование
  53. {
  54. int[] rez = new int[c.Length];
  55. for (int i = 0; i < c.Length; i++)
  56. {
  57. rez[i] = ostat((int)c[i], e, n);
  58. }
  59. return rez;
  60. }
  61. public char[] decode(int[] c, int d, int n)// Декодирование
  62. {
  63. char[] rez = new char[c.Length];
  64. for (int i = 0; i < c.Length; i++)
  65. {
  66. rez[i] = (char)ostat(c[i], d, n);
  67. }
  68. return rez;
  69. }
  70. }
  71. }