static void Main(string[] args)
        {
            switch (args[0])
            {
            case "encrypt":
                BigInteger plain = new BigInteger.Parse(args[1]);
                BigInteger p     = BigInteger.Parse(args[2]);
                BigInteger q     = BigInteger.Parse(args[3]);
                BigInteger e     = BigInteger.Parse(args[4]);
                BigInteger N     = BigInteger.Multiply(p, q);

                Console.WriteLine(BigInteger.ModPow(plain, e, N));
                break;

            case "decrypt":
                BigInteger cipher = new BigInteger.Parse(args[1]);
                BigInteger p      = BigInteger.Parse(args[2]);
                BigInteger q      = BigInteger.Parse(args[3]);
                BigInteger d      = BigInteger.Parse(args[4]);
                BigInteger phi_N  = BigInteger.Multiply(p - 1, q - 1);

                Console.WriteLine(BigInteger.ModPow(plain, d, phi_N));
                break;

            case "findKeyPair":
                BigInteger p   = BigInteger.Parse(args[1]);
                BigInteger q   = BigInteger.Parse(args[2]);
                BigInteger key = BigInteger(args[3]);
                BigInteger N   = BigInteger.Multiply(p, q);

                Console.WriteLine(ExtendedEuclideanAlgorithm(key, N))
                break;

            default:
                Console.WriteLine('Only valid commands:');
                Console.WriteLine('dotnet run encrypt {plaintext in base 10} {prime 1} {prime 2} {key}');
                Console.WriteLine('dotnet run decrypt {cipher in base 10} {prime 1} {prime 2} {key}');
                Console.WriteLine('dotnet run findKeyPair  {prime 1} {prime 2} {key}');
                break;
            }
        }
示例#2
0
 statistics.Permutations = GetPermutations(
     BigInteger.Parse(result.Characters.Length.ToString()),