123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace proba
- {
- class Shifr
- {
- public int p;// Первое простое число
- public int q;// Второе простое число
- public int n;// Модуль просых чисел
- public int e;// Открытый ключ
- public int d;// Закрытый ключ
- public static string phraze;
- public static int[] codePhraze;// Зашифрованная фраза
- public static char[] decoding;// Расшифрованная фраза
- public Shifr()
- {
- p = 193;
- q = 73;
- n = p * q;
- e = 257;
- d = 75521;
- }
- public void ShifrCode()
- {
- codePhraze = code(phraze, e, n);
- }
- public void ShifrDecode()
- {
- decoding = decode(codePhraze, d, n);
- }
- public int isSimple(int number)// Определяет, простое число или нет
- {
- if (number == 1) return 0;
- for (int i = 2; i <= Math.Sqrt(number); i++)
- {
- if (number % i == 0) return 0;
- }
- return 1;
- }
- public int ostat(int x, int y, int z)// Остаток от деления x^y на z
- {
- int ost = x;
- for (int i = y - 1; i > 0; i--)
- {
- ost = (ost * x) % z;
- }
- return ost;
- }
- public int[] code(string c, int e, int n)// Кодирование
- {
- int[] rez = new int[c.Length];
- for (int i = 0; i < c.Length; i++)
- {
- rez[i] = ostat((int)c[i], e, n);
- }
- return rez;
- }
- public char[] decode(int[] c, int d, int n)// Декодирование
- {
- char[] rez = new char[c.Length];
- for (int i = 0; i < c.Length; i++)
- {
- rez[i] = (char)ostat(c[i], d, n);
- }
- return rez;
- }
- }
- }
|