Задание
Написать программу зашифровки и дешифровки текста методом Эль Гамаля
Функционал программы
- Шифрование текста(английский)
- Дешифровка текста
- Выдача используемых ключей для шифрования и дешифрования.
Содержание отчета к программе
Генерация ключей
- 1. Генерируется случайное простое число p.
- 2. Выбирается целое число — первообразный корень.
- 3. Выбирается случайное целое число такое, что 1< x < p .
- 4. Вычисляется y = (g^x)mod p .
- 5. Открытым ключом является тройка (p, g, y), закрытым ключом — число .
Шифрование
Сообщение М должно быть меньше числа P. Сообщение шифруется следующим образом:
Выбирается сессионный ключ — случайное целое число, такое, что 1< k < p-1
Вычисляются числа a = (g^k)mod p и b = (y^k)M mod p.
Пара чисел (a, b) является шифротекстом.
Расшифровывание
Зная закрытый ключ x, исходное сообщение можно вычислить из шифротекста (a, b) по формуле:
M =b(ax )-1 mod p
И формуле:
b(a^x )^-1 =((y^k)M)g^(-kx) =(g^(xk)M)g(-xk) = M (mod p).
Фрагмент программного кода
void crypt(int p, int g, int x, string strIn) { int y = power(g, x, p); string s1 = "Open key(p,g,y) = (" + p + "," + g + "," + y + ")"; string s2 = "Close key x = " + x; if (strIn.Length > 0) { char[] temp = new char[strIn.Length - 1]; temp = strIn.ToCharArray(); for (int i = 0; i <= strIn.Length - 1; i++) { int m = (int)temp[i]; if (m > 0) { int k = Rand() % (p - 2) + 1; int a = power(g, k, p); int b = mul(power(y, k, p), m, p); string s3 = s3 + a + " " + b + " "; } } } }
Скриншот архива с проектом
Пояснения по запуску программы
Visual Studio 2022 (Windows Forms)
anna220699