Example #1
0
        private BigInteger GenerateA(BigInteger n)
        {
            Random     random = new Random();
            BigInteger a = random.Next(1, (int)n), nod = GCD.GetNOD(a, n);

            while (nod != 1)
            {
                a   = random.Next(1, (int)n);
                nod = GCD.GetNOD(a, n);
            }
            return(a);
        }
Example #2
0
 public string Decrypt(BigInteger[] encryptedText)
 {
     byte[] decryptedText = new byte[encryptedText.Length];
     for (int i = 0; i < encryptedText.Length; i++)
     {
         StringBuilder symbol = new StringBuilder("00000000");
         BigInteger    s      = BigInteger.ModPow(BigInteger.Multiply(encryptedText[i], GCD.ModInverse(a, n)), 1, n);
         BigInteger    diff   = s;
         while (diff > 0)
         {
             BigInteger[] lessThenDiff = d.Where(el => el <= diff).ToArray();
             if (lessThenDiff.Length > 0)
             {
                 BigInteger maxItem = lessThenDiff.Max();
                 diff -= maxItem;
                 if (diff >= 0)
                 {
                     symbol.Remove(Array.IndexOf(d, maxItem), 1);
                     symbol.Insert(Array.IndexOf(d, maxItem), "1");
                 }
             }
             else
             {
                 break;
             }
         }
         decryptedText[i] = Convert.ToByte(symbol.ToString(), 2);
     }
     return(Encoding.ASCII.GetString(decryptedText));
 }