Шифрование Эль-Гамаля: исправить код расшифровки - C#
Формулировка задачи:
Написал функцию шифрования и расшифрования. Но расшифровывает не правильно, не могли бы помочь:
// p, g, y - открытые ключи Эль-Гамаля //key - сообщение, его шифруем String Encryption(long p, long g, long y, long key) { Random ran = new Random(); long lsKey; while (true) { long temp = ran.Next(1, (int)p - 1); if (temp > 1 && temp < p - 1) { lsKey = temp; break; } } long temp2 = g; for (int i = 0; i < lsKey; i++) { temp2 = (temp2 * g) % p; } long a = temp2; temp2 = y; for (int i = 0; i < lsKey; i++) { temp2 = temp2 * y; } long b = (temp2 * key) % p; /*long a = (long)Math.Pow(g, lsKey) % p; long b = ((long)Math.Pow(y, lsKey) * key) % p;*/ return a.ToString() + "." + b.ToString(); }
//a и b - шифрованное сообщение long Decryption(long a, long b) { long temp2 = a; for (int i = 0; i < pB - 1 - xB; i++) { temp2 = (temp2 * a); } long Key = (b * temp2) % pB; //long Key = (b * (long)Math.Pow(a, pB - 1 - xB)) % pB; return Key; }
Решение задачи: «Шифрование Эль-Гамаля: исправить код расшифровки»
textual
Листинг программы
... Random ran = new Random(); p = primesNumber[ran.Next(1, primesNumber.Length - 1)]; int n; while (true) if ((n = ran.Next(1, (int)p)) > 1 && n < p - 1) { g = n; break; } while (true) if ((n = ran.Next(1, (int)p)) > 1 && n < p - 1) { x = n; break; } //yA = Math.Pow(g, x) % p; long temp = g; for (int i = 1; i < x; i++) { temp = (temp * g) % p; } y = temp; ...
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д