// Sample of how RSA works. // Note that n * n should not overflow a long // This limits x*y to about 2^15. public static void Main(string[] args) { long x = 25000; long y = 30000; long message = 37373737; long p, q, n, nPrime, e, d; for (p = x; !Numerical.IsPrime(p); p++) { ; } Console.WriteLine("p: " + p); for (q = y + 2; !Numerical.IsPrime(q); q++) { ; } Console.WriteLine("q: " + q); n = p * q; Console.WriteLine("n: " + n); nPrime = (p - 1) * (q - 1); Console.WriteLine("nPrime: " + nPrime); for (e = nPrime / 10; Numerical.Gcd(e, nPrime) != 1; e++) { ; } Console.WriteLine("e: " + e); d = Numerical.Inverse(e, nPrime); Console.WriteLine("d: " + d); Console.WriteLine("Verify inverse: " + (e * d % (nPrime))); Console.WriteLine("message: " + message); long code = Numerical.Power(message, e, n); long decode = Numerical.Power(code, d, n); Console.WriteLine("Code: " + code); Console.WriteLine("Decode: " + decode); if (message != decode) { Console.WriteLine("OOPS: "); } else { Console.WriteLine("Success!!!!"); } }