Шифрование Эль-Гамаля: исправить код расшифровки - 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;
...

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.556 из 5