コード例 #1
0
ファイル: RSA.cs プロジェクト: ValerieBrave/Cryptography_labs
        private BigInteger GenerateCoprimeNumber(BigInteger coprime)
        {
            BigInteger number = random.Next(2, (int)coprime - 1), nod = GCD.GetNOD(number, coprime);

            while (nod != 1)
            {
                number = random.Next(2, (int)coprime - 1);
                nod    = GCD.GetNOD(number, coprime);
            }
            return(number);
        }
コード例 #2
0
 public BigInteger[,] CreateDigitalSign(string text)
 {
     using (MD5 md5Hash = MD5.Create())
     {
         hash = MD5Hash.GetMd5Hash(md5Hash, text);
     }
     byte[] bytes = Encoding.ASCII.GetBytes(hash);
     BigInteger[,] digitalSign = new BigInteger[bytes.Length, 2];
     for (int i = 0; i < bytes.Length; i++)
     {
         do
         {
             BigInteger k = random.Next(2, (int)p - 2);
             while (GCD.GetNOD(k, p - 1) != 1)
             {
                 k = random.Next(2, (int)p - 2);
             }
             digitalSign[i, 0] = BigInteger.ModPow(g, k, p);
             BigInteger temp = BigInteger.Multiply(BigInteger.Subtract(bytes[i], BigInteger.Multiply(x, digitalSign[i, 0])), GCD.ModInverse(k, p - 1));
             digitalSign[i, 1] = temp < 0 ? (p - 1) - BigInteger.ModPow(BigInteger.Negate(temp), 1, p - 1) : BigInteger.ModPow(temp, 1, p - 1);
         } while (digitalSign[i, 1] == 0);
     }
     return(digitalSign);
 }