示例#1
0
        private void button1_Click(object sender, EventArgs e)
        {
            rsap = new RSACryptoServiceProvider();
            var p = rsap.ExportParameters(false);

            var pubkeyout = new Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters(false, new BigInteger(1, p.Modulus), new BigInteger(1, p.Exponent));

            var pubbuilder = new StringBuilder();
            var pubwriter  = new System.IO.StringWriter(pubbuilder);
            var pw         = new Org.BouncyCastle.OpenSsl.PemWriter(pubwriter);

            pw.WriteObject(pubkeyout);
            pub_box.Text = pubbuilder.ToString();
            var pv         = rsap.ExportParameters(true);
            var privkeyout = new Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters(
                new BigInteger(1, pv.Modulus), new BigInteger(1, pv.Exponent), new BigInteger(1, pv.D), new BigInteger(1, pv.P), new BigInteger(1, pv.Q),
                new BigInteger(1, pv.DP), new BigInteger(1, pv.DQ), new BigInteger(1, pv.InverseQ)
                );
            var privbuilder = new StringBuilder();
            var privwriter  = new System.IO.StringWriter(privbuilder);
            var pvw         = new Org.BouncyCastle.OpenSsl.PemWriter(privwriter);

            pvw.WriteObject(privkeyout);
            pv_box.Text = privbuilder.ToString();
        }
示例#2
0
        public static RSAParameters ToRSAParameters(Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters privKey)
        {
            RSAParameters rp = new RSAParameters();

            rp.Modulus  = privKey.Modulus.ToByteArrayUnsigned();
            rp.Exponent = privKey.PublicExponent.ToByteArrayUnsigned();
            rp.P        = privKey.P.ToByteArrayUnsigned();
            rp.Q        = privKey.Q.ToByteArrayUnsigned();
            rp.D        = ConvertRSAParametersField(privKey.Exponent, rp.Modulus.Length);
            rp.DP       = ConvertRSAParametersField(privKey.DP, rp.P.Length);
            rp.DQ       = ConvertRSAParametersField(privKey.DQ, rp.Q.Length);
            rp.InverseQ = ConvertRSAParametersField(privKey.QInv, rp.Q.Length);
            return(rp);
        }
示例#3
0
        } // End Sub GenerateRsaKeyPair

        public static RSA GetMsRsaProvider()
        {
            Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair m_keyPair = GenerateRsaKeyPair(2048);
            // Org.BouncyCastle.Crypto.AsymmetricKeyParameter m_keyParameter = m_keyPair.Public;

            // Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters pub = (Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters)m_keyPair.Public;
            Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters priv = (Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters)m_keyPair.Private;

            var dnPriv = ToRSAParameters(priv);

            //var dnPub = ToRSAParameters(pub);

            return(CreateRSAProvider(dnPriv));
        }
        /// <summary>
        /// Get private key parameters from a RSA key.
        /// The private key must be exportable.
        /// </summary>
        private static Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters GetPrivateKeyParameter(RSA rsaKey)
        {
            RSAParameters rsaParams = rsaKey.ExportParameters(true);
            var           keyParams = new Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters(
                new Org.BouncyCastle.Math.BigInteger(1, rsaParams.Modulus),
                new Org.BouncyCastle.Math.BigInteger(1, rsaParams.Exponent),
                new Org.BouncyCastle.Math.BigInteger(1, rsaParams.D),
                new Org.BouncyCastle.Math.BigInteger(1, rsaParams.P),
                new Org.BouncyCastle.Math.BigInteger(1, rsaParams.Q),
                new Org.BouncyCastle.Math.BigInteger(1, rsaParams.DP),
                new Org.BouncyCastle.Math.BigInteger(1, rsaParams.DQ),
                new Org.BouncyCastle.Math.BigInteger(1, rsaParams.InverseQ));

            return(keyParams);
        }
示例#5
0
        /// <summary>
        /// 使用私钥加密
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public byte[] EncryptByPrivate(byte[] data)
        {
            //var xml = this._provider.ToXmlString(true);
            var parameter = this._provider.ExportParameters(true);
            var pub       = new Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters(false, new Org.BouncyCastle.Math.BigInteger(1, parameter.Modulus),
                                                                                    new Org.BouncyCastle.Math.BigInteger(1, parameter.Exponent));
            var pvt = new Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters(
                new Org.BouncyCastle.Math.BigInteger(1, parameter.Modulus),
                new Org.BouncyCastle.Math.BigInteger(1, parameter.Exponent),
                new Org.BouncyCastle.Math.BigInteger(1, parameter.D),
                new Org.BouncyCastle.Math.BigInteger(1, parameter.P),
                new Org.BouncyCastle.Math.BigInteger(1, parameter.Q),
                new Org.BouncyCastle.Math.BigInteger(1, parameter.DP),
                new Org.BouncyCastle.Math.BigInteger(1, parameter.DQ),
                new Org.BouncyCastle.Math.BigInteger(1, parameter.InverseQ)
                );
            RsaKeyHelper helper = new RsaKeyHelper(pub, pvt);

            //var helper = RsaKeyHelper.FromXmlKey(xml);
            return(helper.EncryptByPrivate(data));
        }
        private static Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair GetRsaKeyPair(RSAParameters rp)
        {
            Org.BouncyCastle.Math.BigInteger modulus = new Org.BouncyCastle.Math.BigInteger(1, rp.Modulus);
            Org.BouncyCastle.Math.BigInteger pubExp  = new Org.BouncyCastle.Math.BigInteger(1, rp.Exponent);

            Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters pubKey =
                new Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters(
                    false,
                    modulus,
                    pubExp);

            Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters privKey =
                new Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters(
                    modulus,
                    pubExp,
                    new Org.BouncyCastle.Math.BigInteger(1, rp.D),
                    new Org.BouncyCastle.Math.BigInteger(1, rp.P),
                    new Org.BouncyCastle.Math.BigInteger(1, rp.Q),
                    new Org.BouncyCastle.Math.BigInteger(1, rp.DP),
                    new Org.BouncyCastle.Math.BigInteger(1, rp.DQ),
                    new Org.BouncyCastle.Math.BigInteger(1, rp.InverseQ));

            return(new Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair(pubKey, privKey));
        }
示例#7
0
        /// <summary>
        /// Creates a signature value given a signature base and the consumer secret and a known token secret.
        /// </summary>
        /// <seealso cref="http://oauth.net/core/1.0#rfc.section.9.2"/>
        /// <param name="signatureMethod">The hashing method</param>
        /// <param name="signatureTreatment">The treatment to use on a signature value</param>
        /// <param name="signatureBase">The signature base</param>
        /// <param name="consumerSecret">The consumer secret</param>
        /// <param name="tokenSecret">The token secret</param>
        /// <returns></returns>
        public static string GetSignature(OAuthSignatureMethod signatureMethod, OAuthSignatureTreatment signatureTreatment,
                                          string signatureBase, string consumerSecret, string tokenSecret)
        {
            if (tokenSecret.IsNullOrBlank())
            {
                tokenSecret = string.Empty;
            }

            var unencodedConsumerSecret = consumerSecret;

            consumerSecret = UrlEncodeRelaxed(consumerSecret);
            tokenSecret    = UrlEncodeRelaxed(tokenSecret);

            string signature;

            switch (signatureMethod)
            {
            case OAuthSignatureMethod.HmacSha1:
            {
#if !WINDOWS_UWP
                HMACSHA1 crypto = new HMACSHA1();
                string   key    = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                crypto.Key = encoding.GetBytes(key);
                signature  = signatureBase.HashWith(crypto);
#else
                signature = signatureBase.HashWith(HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha1));
#endif
                break;
            }

            case OAuthSignatureMethod.HmacSha256:
            {
                HMACSHA256 crypto = new HMACSHA256();
                string     key    = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                crypto.Key = encoding.GetBytes(key);
                signature  = signatureBase.HashWith(crypto);

                break;
            }

            case OAuthSignatureMethod.RsaSha1:
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    Org.BouncyCastle.OpenSsl.PemReader pemReader;
                    Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair keyPair;

                    using (StreamWriter writer = new StreamWriter(stream))
                    {
                        writer.Write(unencodedConsumerSecret);
                        writer.Flush();
                        stream.Position = 0;

                        pemReader = new Org.BouncyCastle.OpenSsl.PemReader(new StreamReader(stream));
                        keyPair   = (Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair)pemReader.ReadObject();
                    }

                    Org.BouncyCastle.Crypto.AsymmetricKeyParameter priKey = (Org.BouncyCastle.Crypto.AsymmetricKeyParameter)keyPair.Private;

                    Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters rsaPriv = (Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters)priKey;
                    RSAParameters RSAKeyInfo = Org.BouncyCastle.Security.DotNetUtilities.ToRSAParameters(rsaPriv);

                    using (RSACryptoServiceProvider provider = new RSACryptoServiceProvider())          // { PersistKeyInCsp = false };
                    {
                        provider.ImportParameters(RSAKeyInfo);

                        SHA1Managed hasher = new SHA1Managed();
                        byte[]      hash   = hasher.ComputeHash(encoding.GetBytes(signatureBase));

                        Trace.WriteLine(string.Format("Hashing [{0}]", signatureBase));

                        signature = Convert.ToBase64String(provider.SignHash(hash, CryptoConfig.MapNameToOID("SHA1")));
                        Trace.WriteLine(string.Format("SHA1 Signature [{0}]", signature));
                    }
                }
            }
            break;

            case OAuthSignatureMethod.PlainText:
            {
                signature = "{0}&{1}".FormatWith(consumerSecret, tokenSecret);

                break;
            }

            default:
                throw new NotImplementedException("Only HMAC-SHA1, HMAC-SHA256, and RSA-SHA1 are currently supported.");
            }

            string result = signatureTreatment == OAuthSignatureTreatment.Escaped
                ? UrlEncodeRelaxed(signature)
                : signature;

            return(result);
        }