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