static BigInteger Alice(BigInteger C, BigInteger P, BigInteger X) { BigInteger ReverseX = GCDEX.GetX(X, P - 1); if (ReverseX > 0) { BigInteger T = BigInteger.ModPow(ReverseX, 1, P - 1); return(BigInteger.ModPow(C, T, P)); } else { return(-1); } }
static void Main(string[] args) { int Nice = 0; int NotNice = 0; BigIntegerRandom BIR = new BigIntegerRandom(); DigitalSignature NewSignature = new DigitalSignature(64); //p,g //Console.WriteLine("i=={0,3} G=={1}", i,NewSignature.G); BigInteger X; do { X = BIR.GenerateSimple(64); if (GCDEX.GetX(X, NewSignature.P - 1) > 0) { break; } } while (true); //Закрытый ключ BigInteger M = BigInteger.Parse("465498132"); //Исходное сообщение BigInteger Z = BigInteger.ModPow(M, X, NewSignature.P); //Подписанное сообщение for (int i = 0; i < 10; i++) { if (Bob(NewSignature.P, NewSignature.G, X, Z, M)) { Nice++; } else { NotNice++; } } Console.WriteLine("Nice=={0}\nNotNice=={1}", Nice, NotNice); }