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(); }
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); }
} // 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); }
/// <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)); }
/// <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); }