private string CreateRsaKey()
        {
            string keyDirectory  = base.Server.MapPath("~/config");
            string generatorPath = base.Server.MapPath("~/config/RSAGenerator/Rsa.exe");

            return(RsaKeyHelper.CreateRSAKeyFile(generatorPath, keyDirectory));
        }
        public void PublicXmlToPemTest()
        {
            string xml = "<RSAKeyValue><Modulus>pNxHZASsv0YJIIfrD5FihVLRTOvEAcQUqcWUu3uYK4+yxxNIXMQBJx0bDllVn/hr15oIh2Kjhe6LcrXM1lZ02DF20jr+eswd3QObO9oQ5g52Gj9TWziBdasfNZPXv3i9sQ0UWI0KMGsbm6Zkl/r8P+/zZXPn/L6H7zsQfR6wu3k=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
            string pub = RsaKeyHelper.PublicXmlToPem(xml);

            Assert.IsTrue(pub.EndsWith("AQAB"));
        }
示例#3
0
        public void Test1()
        {
            string public_key = @"-----BEGIN CERTIFICATE-----
MIID3DCCAsSgAwIBAgIUGL/XGN8xPHGDe57WT0U005JRZMMwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMTkwODEyMDYxMzIyWhcNMjQwODEwMDYxMzIyWjBuMRgwFgYDVQQDDA9U
ZW5wYXkuY29tIHNpZ24xEzARBgNVBAoMClRlbnBheS5jb20xHTAbBgNVBAsMFFRl
bnBheS5jb20gQ0EgQ2VudGVyMQswCQYDVQQGDAJDTjERMA8GA1UEBwwIU2hlblpo
ZW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDmb7jBAvG3bN7a4/d
6mM6wKefEjcO+Bl85EgdxoXCDkN+0mSxyGW+03+wePYGqs24U6Ab1m1VqrfnCWuC
guKEJSAk8mtRRki4gfs4OBhePVYGSEFkzKdtbF0ucw10pPElHG5Yrvd+L3hwbMnj
D4m0MfXzURcxR7CZ/LUmizK/lkMGvt734iATcb3vvZpYpTRW34mQXXpnzifV5RXg
h0wwMn28cpUqy9EwkgWEEdgRb/s0REeQFEPqFsPjnNffe8/aTETQJb+0W8cRK2IH
GINuhP3f8RSbGWmwKzI14b3xZEqBQlPFFDrvELvjtdo6OEHGq0k7JJsiyp0hmWIL
dWplAgMBAAGjgYEwfzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE8DBlBgNVHR8EXjBc
MFqgWKBWhlRodHRwOi8vZXZjYS5pdHJ1cy5jb20uY24vcHVibGljL2l0cnVzY3Js
P0NBPTFCRDQyMjBFNTBEQkMwNEIwNkFEMzk3NTQ5ODQ2QzAxQzNFOEVCRDIwDQYJ
KoZIhvcNAQELBQADggEBAFGyHl1bYh3qdh5Ssb6SSrVlLjzjoP3iPYckM6jFv78O
i24k+IsI8wAyM1dY3WkmI8bn8n47QjMqow6TxxtvvbEYzX0vAb6elev4c66diknb
P9jR+zu5H0NKR1HnoFrzgACG9Lf38P+1P2FNWbetCMUAjAAcw/7rlHbqYfOYz+YW
nLBkx4T4aJQduXLXpzVQx1xz6yZzq21oDqVZQq040XCoqVCGyfR4a+owV3cphOUJ
7EiV0Kkq9nN1vmEYSamINKx4h13pA5uYPxBTnZIXKcW/85IV2JF0Gv6XtUFmRlZo
eSBP4f3F+9aPs4tu2eOVxTLsWwia8ydXikFdK1zDubA=
-----END CERTIFICATE-----";
            //string formatKey = RsaKeyHelper.FormatKeyString(public_key);

            var    helper       = RsaKeyHelper.FromPemKeyString(public_key);
            var    n            = helper.RSACryptoServiceProvider();
            string pubKeyString = helper.GetKeyString();

            Assert.Pass();
        }
        public void GenRsaKeyTest()
        {
            var helper = RsaKeyHelper.GenRsaKey(2048);

            Debug.WriteLine("PRIVATE:" + helper.ToXmlString(true));
            Debug.WriteLine("PUBLIC:" + helper.ToXmlString(false));
            Assert.IsTrue(helper != null);
        }
        public void FromXmlKeyTest()
        {
            string xmlKey = "<RSAKeyValue><Modulus>woDaokr9YMTGnCd3voqEdFQgVYTnc9ZXdjpamdFvsuqHldBOiqBanhJiMlVLFKXoAQPGl50tGpyp5vVI6GmTy//aX80UrHAJ3muOgi+jXpxuqfS8rp9Ld7gmHgvvFXT1bcJsrgMZJgAF6N31rpo1OcTzq1IDgEtIo2ca0UYMh5k=</Modulus><Exponent>AQAB</Exponent><P>/6UsMm9IbQhziMxMkw9GlEJ1mApmmv/vv0WUEzD+lPrOrTfXPGKIx9o9heMJaS6HYwQHYcjJ+4vrNzMUyfOihw==</P><Q>wsX1YB6m5AbBVZim6dyqDZ2X/wYBQMKO1l+ref7/LhOj/S5CdO/363bTKfHeGmuH19QvCJAmTA7mvuV/rvds3w==</Q><DP>6tmkZpjQ4kl3Sd7VIexQnHcJbKlxZUdlykNzKsZBuj9Git7XvkOPAHo/NrZBuPzjp1TWK0C4PXxmk4k7ueM2FQ==</DP><DQ>TRuDhbb8yP8noNRbF/BE3jkKiGp/Kn0bgSDEyPo7Walq3Xtn0dWCZ5RWCp/3FqyFTdtxd0lh7/BiRyaiAslvLw==</DQ><InverseQ>/lCyqC6dzJKUCkUxMMMwn+MVx5rxpUG7WZxWeUkkV1gfgye9QBbdPLvIbcrr8Q7xdmcY58hKFV2C76wB2uCWoA==</InverseQ><D>WDgTcjrrE6IMpzTrhfvTueOSSteeFxcn0lMDVvL8Y70mRBgYF55Fm56g9U1kYXgic5tfztKWa5SVJ1EngWqpgrg8pY/sHwlXDeId8EA1HGfhmSCPjAUSMlWo98GrMLcbGdY63bj9jWnuOIMrkME7HZ9IdszAutNAWleUeTldLeU=</D></RSAKeyValue>";
            //string xmlKey = "<RSAKeyValue><Modulus>q+NfMvfOxSbRZU2esnFZ17icIts9Yv1teeFD7sSSKzQ8xaCKVRUbYZngsjisQXcFXpd2Z2FFZ+XFaMMb/NVrmPXkSC+b38DzLGYPpLXVNUWibzv0uO0EN4DrP59xxtx3NTGkUP7ADH9gPnZNQna9Wfar/pLKG+sUDKIdDssy6DE=</Modulus><Exponent>AQAB</Exponent><P>zHClmRF/Gr7W4fDDk+GMqKr68/qu+GoS+uxGDSRmC2sBqgrI/G37nNXsGVFzcNxnm0LxFAJZsAgOU7SM/MVh9w==</P><Q>1z0QoW1/8n27uUYq9TesmitLRE2gXMtY8Fa31LafvDbnm5uZwRg7zNszkqzMXqLYHOHmNGt5k1mAjVFOUAr9Fw==</Q><DP>F3u5CeQgnYneVQW68XmvFpDNUskw4AgPNhN92HSd5CHehxHGFHjttg48mIvqnsQygnsmBg5fDwFd4++RYlep8Q==</DP><DQ>sKigI76aC0+Danfa/lVpx0fNiQwlmMQWBX1HeMFDrdlqk19M/R2Ex4kKdVJ6kxoZQutuZIvpxzTovBSFsFC0lQ==</DQ><InverseQ>kxBQQtQ5wVvB+JOAzOuBjBOPBpNegKi+c970APIrRk7JaPzVhbxL2mvHSzF19WnD2mLzzuqB/knLfbZ0reH6vQ==</InverseQ><D>ObVtudvvBMwCk2Na+4gI5N8rNJys4HY7cicKOriuZmj0WlmK+APNHJigEtXqJ1SBbf+mFhFXTwmanJCc7ebtZ3GHtrs3hc1wafPrjEY6muKJjt+X3B/Gox1Mzz2Kxqpq7kF+EKa/duX/1HOR0U87D26cy7kwgIgk6gmQ843kIS0=</D></RSAKeyValue>";
            var    helper = RsaKeyHelper.FromXmlKey(xmlKey);
            string pemPub = helper.ToXmlString(true);

            Assert.IsNotNull(pemPub);
        }
示例#6
0
        private void BindData()
        {
            this.hdfCopyUrl.Value   = this.txtUrl.Text = string.Format("http://{0}/api/AliPayFuwuApi.ashx", base.Request.Url.Host);
            this.hdfCopyToken.Value = this.txtToken.Text = string.Format("http://{0}/api/AliPayFuwuApi.ashx", base.Request.Url.Host);
            this.RSAPublic.Value    = this.txtRSA.Text = RsaKeyHelper.GetRSAKeyContent(base.Server.MapPath("~/config/rsa_public_key.pem"), true);
            SiteSettings masterSettings = SettingsManager.GetMasterSettings(true);

            this.txtAliAppId.Text       = masterSettings.AlipayAppid;
            this.txtAliFollowTitle.Text = masterSettings.AliOHFollowRelayTitle;
        }
        public void ToXmlStringTest()
        {
            string privateKey = "<RSAKeyValue><Modulus>woDaokr9YMTGnCd3voqEdFQgVYTnc9ZXdjpamdFvsuqHldBOiqBanhJiMlVLFKXoAQPGl50tGpyp5vVI6GmTy//aX80UrHAJ3muOgi+jXpxuqfS8rp9Ld7gmHgvvFXT1bcJsrgMZJgAF6N31rpo1OcTzq1IDgEtIo2ca0UYMh5k=</Modulus><Exponent>AQAB</Exponent><P>/6UsMm9IbQhziMxMkw9GlEJ1mApmmv/vv0WUEzD+lPrOrTfXPGKIx9o9heMJaS6HYwQHYcjJ+4vrNzMUyfOihw==</P><Q>wsX1YB6m5AbBVZim6dyqDZ2X/wYBQMKO1l+ref7/LhOj/S5CdO/363bTKfHeGmuH19QvCJAmTA7mvuV/rvds3w==</Q><DP>6tmkZpjQ4kl3Sd7VIexQnHcJbKlxZUdlykNzKsZBuj9Git7XvkOPAHo/NrZBuPzjp1TWK0C4PXxmk4k7ueM2FQ==</DP><DQ>TRuDhbb8yP8noNRbF/BE3jkKiGp/Kn0bgSDEyPo7Walq3Xtn0dWCZ5RWCp/3FqyFTdtxd0lh7/BiRyaiAslvLw==</DQ><InverseQ>/lCyqC6dzJKUCkUxMMMwn+MVx5rxpUG7WZxWeUkkV1gfgye9QBbdPLvIbcrr8Q7xdmcY58hKFV2C76wB2uCWoA==</InverseQ><D>WDgTcjrrE6IMpzTrhfvTueOSSteeFxcn0lMDVvL8Y70mRBgYF55Fm56g9U1kYXgic5tfztKWa5SVJ1EngWqpgrg8pY/sHwlXDeId8EA1HGfhmSCPjAUSMlWo98GrMLcbGdY63bj9jWnuOIMrkME7HZ9IdszAutNAWleUeTldLeU=</D></RSAKeyValue>";
            string publicKey  = "<RSAKeyValue><Modulus>woDaokr9YMTGnCd3voqEdFQgVYTnc9ZXdjpamdFvsuqHldBOiqBanhJiMlVLFKXoAQPGl50tGpyp5vVI6GmTy//aX80UrHAJ3muOgi+jXpxuqfS8rp9Ld7gmHgvvFXT1bcJsrgMZJgAF6N31rpo1OcTzq1IDgEtIo2ca0UYMh5k=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
            var    helper     = RsaKeyHelper.FromXmlKey(privateKey);
            string xmlPvt     = helper.ToXmlString(true);
            string xmlPub     = helper.ToXmlString(false);

            Assert.AreEqual(privateKey, helper.ToXmlString(true));
            Assert.AreEqual(publicKey, xmlPub);
        }
示例#8
0
        protected void RsaCreat_Click(object sender, System.EventArgs e)
        {
            string text = RsaKeyHelper.CreateRSAKeyFile(base.Server.MapPath("~/config/RSAGenerator/Rsa.exe"), base.Server.MapPath("~/config"), false);

            if (text == "success")
            {
                this.ShowMsg("新密钥对生成成功!", true);
                this.BindData();
                return;
            }
            this.ShowMsg("新密钥对生成失败" + text, false);
        }
 protected void Page_Load(object sender, EventArgs e)
 {
     if (!this.Page.IsPostBack)
     {
         SiteSettings masterSettings = SettingsManager.GetMasterSettings();
         string       path           = base.Server.MapPath("~/config/rsa_public_key.pem");
         string       text           = File.Exists(path) ? RsaKeyHelper.GetRSAKeyContent(path, true) : this.CreateRsaKey();
         this.txtAppId.Text      = masterSettings.AliOHAppId;
         this.txtAppWelcome.Text = masterSettings.AliOHFollowRelay;
         this.txtUrl.Text        = $"http://{base.Request.Url.Host}/api/alipay.ashx";
         this.txtPubKey.Text     = text;
     }
 }
示例#10
0
        protected void RsaCreat_Click(object sender, EventArgs e)
        {
            string str = RsaKeyHelper.CreateRSAKeyFile(base.Server.MapPath("~/config/RSAGenerator/Rsa.exe"), base.Server.MapPath("~/config"), false);

            if (str == "success")
            {
                this.ShowMsg("新密钥对生成成功!", true);
                this.BindData();
            }
            else
            {
                this.ShowMsg("新密钥对生成失败" + str, false);
            }
        }
示例#11
0
        public static void RsaTest()
        {
            string privateKey    = string.Empty;
            string publicKey     = string.Empty;
            string privateKeyPk8 = string.Empty;

            // 生成密钥对
            RsaKeyHelper.GenKey(out publicKey, out privateKey, out privateKeyPk8);

            string data    = @"Hello 中国,这是一段很神奇的代码";
            string encData = RsaBCHelper.Encrypt(data, publicKey);
            string decData = RsaBCHelper.Decrypt(encData, privateKey);

            Console.WriteLine("原文:{0}", data);
            Console.WriteLine("密文:{0}", encData);
            Console.WriteLine("解密:{0}", decData);
        }
示例#12
0
        private string CreatePubKeyContent()
        {
            SiteSettings masterSettings = SettingsManager.GetMasterSettings();
            string       path           = base.Server.MapPath("~/config/rsa_public_key.pem");
            string       result;

            if (!File.Exists(path))
            {
                result = this.CreateRsaKey();
                SettingsManager.Save(masterSettings);
            }
            else
            {
                result = RsaKeyHelper.GetRSAKeyContent(path, true);
            }
            return(result);
        }
        /// <summary>
        /// 转换密钥格式
        /// </summary>
        /// <param name="keyString"></param>
        /// <param name="isPrivate"></param>
        /// <param name="toFormat"></param>
        /// <returns></returns>
        private static string TransformKeyFormat(string keyString, bool isPrivate, string toFormat)
        {
            string fromFormat = DetectKeyStringFormat(keyString, isPrivate);

            if (fromFormat == toFormat)
            {
                return(keyString);
            }
            RsaKeyHelper helper = null;

            if (fromFormat == "xml")
            {
                helper = RsaKeyHelper.FromXmlKey(keyString);
            }
            else if (fromFormat == "pkcs1")
            {
                keyString = isPrivate ? RsaKeyHelper.FormatPrivateKey(keyString, RsaKeyHelper.KeyFormat.pkcs1) : RsaKeyHelper.FormatPublicKey(keyString);
                helper    = RsaKeyHelper.FromPemKeyString(keyString);
            }
            else if (fromFormat == "pkcs8")
            {
                keyString = isPrivate ? RsaKeyHelper.FormatPrivateKey(keyString, RsaKeyHelper.KeyFormat.pkcs8) : RsaKeyHelper.FormatPublicKey(keyString);
                helper    = RsaKeyHelper.FromPemKeyString(keyString);
            }
            if (helper == null)
            {
                return(keyString);
            }
            string res = keyString;

            if (toFormat == "xml")
            {
                res = helper.ToXmlString(isPrivate);
            }
            else if (toFormat == "pkcs1")
            {
                helper.Format = RsaKeyHelper.KeyFormat.pkcs1;
                res           = helper.GetKeyString(isPrivate);
            }
            else if (toFormat == "pkcs8")
            {
                helper.Format = RsaKeyHelper.KeyFormat.pkcs8;
                res           = helper.GetKeyString(isPrivate);
            }
            return(res);
        }
示例#14
0
        public static void RsaSignTest()
        {
            string privateKey    = string.Empty;
            string publicKey     = string.Empty;
            string privateKeyPk8 = string.Empty;

            // 生成密钥对
            RsaKeyHelper.GenKey(out publicKey, out privateKey, out privateKeyPk8);

            string data       = @"Hello 中国,这是一段很神奇的代码";
            string signedData = RsaBCHelper.Sign(data, privateKey);
            bool   success    = RsaBCHelper.Verify(data, signedData, publicKey);

            Console.WriteLine("原文:{0}", data);
            Console.WriteLine("签名:{0}", signedData);
            Console.WriteLine("验签:{0}", success);
        }
示例#15
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddDbContext <ApplicationDbContext>(options =>
                                                         options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

            services.AddIdentity <ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores <ApplicationDbContext>()
            .AddDefaultTokenProviders();

            services.AddMvc();
            services.AddOAuthServer <Services.SampleClientProvider>();

            var                keyId              = Configuration["OAuthServer:DefaultKey:Id"];
            var                alg                = Configuration["OAuthServer:DefaultKey:Alg"];
            SecurityKey        securityKey        = null;
            SigningCredentials signingCredentials = null;

            if (alg == "rsa")
            {
                var rsaParams = RsaKeyHelper.ReadParameters(Configuration["OAuthServer:DefaultKey:PrivateKey"], Configuration["OAuthServer:DefaultKey:PrivateKeyPassword"]);
                securityKey        = new RsaSecurityKey(rsaParams);
                signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.RsaSha256Signature);
            }
            else if (alg == "ecdsa")
            {
                var cngKey = ECDSAKeyHelper.ReadParameters(Configuration["OAuthServer:DefaultKey:PrivateKey"], Configuration["OAuthServer:DefaultKey:PrivateKeyPassword"]);
                securityKey        = new ECDsaSecurityKey(new System.Security.Cryptography.ECDsaCng(cngKey));
                signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.EcdsaSha256Signature);
            }

            services.Configure <OAuthServerOptions>(options =>
            {
                options.Issuer = Configuration["OAuthServer:Issuer"];
                options.Keys.Add(keyId, signingCredentials);
            });

            // Add application services.
            services.AddTransient <IEmailSender, AuthMessageSender>();
            services.AddTransient <ISmsSender, AuthMessageSender>();
        }
示例#16
0
 protected void Page_Load(object sender, EventArgs e)
 {
     if (!this.Page.IsPostBack)
     {
         string       rSAKeyContent;
         SiteSettings masterSettings = SettingsManager.GetMasterSettings(false);
         string       path           = base.Server.MapPath("~/config/rsa_public_key.pem");
         if (!File.Exists(path))
         {
             rSAKeyContent = this.CreateRsaKey();
             SettingsManager.Save(masterSettings);
         }
         else
         {
             rSAKeyContent = RsaKeyHelper.GetRSAKeyContent(path, true);
         }
         this.txtAppId.Text      = masterSettings.AliOHAppId;
         this.txtAppWelcome.Text = masterSettings.AliOHFollowRelay;
         this.txtUrl.Text        = string.Format("http://{0}/api/alipay.ashx", base.Request.Url.Host);
         this.txtPubKey.Text     = rSAKeyContent;
     }
 }
        public void ReadPemCertificateTest()
        {
            string pemKey     = @"-----BEGIN CERTIFICATE-----
MIID8DCCAtigAwIBAgIUfOURZvcxwdHsqEAKgSegT9IaSg0wDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMTkwODEyMDYxMzIyWhcNMjQwODEwMDYxMzIyWjCBgTETMBEGA1UEAwwK
MTU0ODY5OTM5MTEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMS0wKwYDVQQL
DCTmt7HlnLPkub7pvI7nm5vkuJblrp7kuJrmnInpmZDlhazlj7gxCzAJBgNVBAYM
AkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAPESgb9JFFVfgpjd4tz737saoLs3W0IEcTlHWQ3oft7KdtxYrf/EzYMO
gRGLbNQw1iKPkhR3pYoEGmQP29vGWs3XhJVUeaw+/5abnvzHsU+i+FeAHqsV1dwl
CeXFuSR3kkmbVg/ZyuugH+EXW3aC6bXM4wufBiogJ19C963G7WwGRneVaIu4oi15
b2qIkL+5on28HeOg5cbMP/zrmiSXY2mdan66MfiHG537VV0Q3TIIVM+lQjTSRwMu
DJH+XrnbLc4rN70JrIqC0ngmTD7NqsJ426LWW601nh5gInE9gDDdrW4VLvXxzEqP
nOaUY1SF0jbCpmDYzlo8knhOpmu/aYsCAwEAAaOBgTB/MAkGA1UdEwQCMAAwCwYD
VR0PBAQDAgTwMGUGA1UdHwReMFwwWqBYoFaGVGh0dHA6Ly9ldmNhLml0cnVzLmNv
bS5jbi9wdWJsaWMvaXRydXNjcmw/Q0E9MUJENDIyMEU1MERCQzA0QjA2QUQzOTc1
NDk4NDZDMDFDM0U4RUJEMjANBgkqhkiG9w0BAQsFAAOCAQEADVYyBwZatxC6NHKl
IxlZSEKQWGBXmRCHWfBLHboVzfAgsjzISHoOZWoXcp7Perd1Ggh4nJZ2Mp53WaHS
d/G6T1cZ+oAccOqC8kZqfkbAr0lqkGKcz48mgBP3ZDvbYNoeeYHBZvpZDLbrVoCG
khXrCgR35zYgUAiPaxRVRfY+421ItdrUlZ57SedVUbbqnSPTpSEGAatCWjKx+Ky/
h8+pwXVeGAj0FPfXze2pIvVKAPwm9y80/WhdMDGpyOiFcPfIKocQ4K1Nd11Xw1c2
5XDfOGZL0mYzFvhIiATkne4kRjiP0/N4Z+0MwDc8TNFoZDVpKh2Rj+WKfbobjzY3
ntLd0A==
-----END CERTIFICATE-----";
            string pkcs1_key  = @"MIIEpAIBAAKCAQEAz/+myUn4kfGtsonvGTxoPiCv1v1OVT2csx/qBjtLHTytc5LM
YfZmFPTlZdu/mR44xzkqNqHDgSPXxEezgmhXUD6VtydPsx479glWhyhaYFVFNguE
T/G8sg3Mq/fgmcCnATTxS3sjH6D+oQI9gKhiLZkOuQrRP5X+XzxwkU10lDnD1vPj
h68a9AlvaddbJEF+kGo7lHRAVxirRRy3ZFgesFNHdhZ94Iyk/qqh909dXbzDIAvm
+/PTD2JMFKGLo210EY1/+sVc4bWgFMm95uJPTQU+eoBKmVrVh/fTGz6VBZl9on43
DeYJ/y4C9A63d/hLf7Afm8TDYbruK7pDPUJD8wIDAQABAoIBAQCeZ82mqJ4Uz+EA
AspEBtxAzHX+HmWkx0pqpJh+7HM1LfvO8/KRfKybszJtU2DkhL6rAt8iQin5VMnD
IvQUEdDFPRSaKucou5LgupXaUyIZEXenRDgdBjY1yAqiwSGdFrpZUe+eE4ZZVSv2
hRU/wX0byuAKjrFzYpEaCJaWIk3xf3jwCZAM+eR3nDgWGFrPQxsqwBaGqDv2XaiZ
e1j2OsYDyuaOMYZNnZhlf952Q/TocYPpfp5odjG4l6pscvffPdGA3Uh26sYJDEFF
IXHBxiUON63F8vxqS/6XbyCKEI0prSE/jAESmkyQ1QiLZprE5ZeyrLP4Q12dg8NZ
YmoGEX8ZAoGBAO9JGgOZhUqwB7fUacXLMsXmP9WvMPwRlH/D1yTq35f6qTcuFl2G
vxGldONDKzrCIU7vS7sRLt9N5grHNBfI2dYacwpzUAFoPr/Jv7XR59VroVm+a3zp
xxRFKqsO4l3EU1zxkqgBfISYFP/qNzMYA/zQ35uR5aQuiweZo3VLrxrfAoGBAN6H
E/twseHHb+hkEXRWuWQUuiP2Px0x27gf3V8iUrfYAmfsFgkURzfMU6cw6QQVFAhi
5oxW06a85d/Bjd30NA67FVf6rD/gI0ZbDxWXSNMNuk8ioRKyZBXafeF4cNbCbdZ6
uCbGeX9a1LSPfveIDqCC+poj4THVrl7NRStx+Y1tAoGAFVv3IH8hsMsJxVUGpAtB
Wvz0kcRzoOyIzubSW49DqjNLy4snn+2ZPKACUQ772uDdTEh8ABTGlFRFxoyFj+Hz
3/K4diRY7ec6QrBllntIMHrNCk+/FIVhqeOKrX5Eoo4VyuQdbTXEwak5pqZniv4H
zRdv/lkFoKQu8Ny8BIpe9Q0CgYAzcAvpakJkC0LN+Bukxcsy3Cuu1mP+bqD4bb0x
GXD/eBoORZ9OV/aiakPH+OFUBT9NNPdP514jQ7TrRQVzEdjastobLSGV3kypHbFd
70txJdI0KrAK71t9RbUlYj7LFcRn+JQKuoQpMSjL2AOkWjnvVndxG+wZJeiZl19u
zHi//QKBgQDGg4yHwHX35Q+PcLQLjs4FekSfUtkEalyEAy4AsiPFTSXqJggcn0tZ
4YPjO+oLccab6hTd9CT17YLiFAKn/IjzMctaWCqlZHfMn7DKbwpAXA4CfkIYECCP
9IjKw6JEBXwXZ7kUJapQ6UJXDU2IvmyfuFwKp7swkdTAUbg7VZEk9A==";
            string pkcs8_key  = @"MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDxEoG/SRRVX4KY
3eLc+9+7GqC7N1tCBHE5R1kN6H7eynbcWK3/xM2DDoERi2zUMNYij5IUd6WKBBpk
D9vbxlrN14SVVHmsPv+Wm578x7FPovhXgB6rFdXcJQnlxbkkd5JJm1YP2crroB/h
F1t2gum1zOMLnwYqICdfQvetxu1sBkZ3lWiLuKIteW9qiJC/uaJ9vB3joOXGzD/8
65okl2NpnWp+ujH4hxud+1VdEN0yCFTPpUI00kcDLgyR/l652y3OKze9CayKgtJ4
Jkw+zarCeNui1lutNZ4eYCJxPYAw3a1uFS718cxKj5zmlGNUhdI2wqZg2M5aPJJ4
TqZrv2mLAgMBAAECggEAJmcUVCyIGLGGVGPEZ/+XvG6ZfDltSC78+mrrPNP0ofkO
xjs6PKxVMLN2zByx0XuWIRtN4gTNUhclPRtporEOdgwHCuLSHyZKAOv5f7sv+8ey
V/4I5Kgt0Uv1L603uR9zJlagdxXyxWZUrb7SyyY/pL5mzMsgaEWHAB3i5sPxvmtS
UYUterV83E7Q+MArCq5VaVzw/5LBpaB+HKGjPpSOY6+Fwg/ruy0nrJ/vwwx2ec/s
iqYVGFEJLs+uIt6lyPJjrtfVl6A3uydgEMWKSs8Ws/5G7h9Dj3av6u+393ND9bki
VX9Jg3+LeB2n6CXV7gvYgAQDZBfzLonsvojKmq2UwQKBgQD+8tR3JgYXHnOdYBUp
UNlAfQjLzu/ksvV55HRdPzkm+DFfAbxka95FkdIPvL/qWWAuTja6TDLCnvZ/8VCz
bk2DvVdqs07W6Vt0r5m78Cpc7RYJ0hFU8alWtmx+zoT2wZqmuFRs+obmE42fYYg0
1Xqm/AE4MkAlhHF0wGSaN4DlHwKBgQDyEQbNsoXTyw7pMwedT0J3AA3kgg+5RTiR
/DlAa/HURYgPw919PZT0BIUq38VvdKZs3fWATCBc9yBHtb9O6OBVfKJB97xra2zt
YAzIZyAHuczgBycRv879zZNyBn3MgAHll06cpEry+WIcw65DllgaQ6suCELznMeB
KiURBfGiFQKBgQCLdjY3PzuRpfzEl+y7fxh4qG0JYBfmWObjWM82uwD+ikInoIF3
xXH/SHdKWIv7HAz7B5n0av5RbDeXYWAt5ybL6+VH3vI/qcN3nx9PqV7jGmY11Q3a
E5/4aS4MZ9hgSyPYE3lLa/gjH4sXJnklvamscqoQHZztaPfPT/c4TShbLQKBgAns
tsmyOxhu5+KZzAMgH8p/PxKSXpCrDOG3ZKWGh3i7jROQZUFgR/4lPUx/tjmWn8gw
5YLoHB+TpkgqZHiYxbHblU99F8WTtviYio2g5MhMTuEUif6JTbRMPHJdX8UFro46
QOfdOJFzthkV0MxGmsAg7CDMB+qzD9702mYzRy/tAoGAAOpk+q6u6ChmeJaZkeTi
bZQ9cmyjyWOUquWhneByUmItFRYD/zpQdUnuyO0fSQwXRRn3I7OFHOgHkmNGt40F
gJMoWpR+XsUuEOcOn/xf9isTyqDtlZfIwZWmOD3EUysEVpIqTHd46CeFvsSuolCL
YTldDcXkiQJBNRswHXN4a64=";
            string public_key = @"-----BEGIN CERTIFICATE-----
MIID3DCCAsSgAwIBAgIUGL/XGN8xPHGDe57WT0U005JRZMMwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMTkwODEyMDYxMzIyWhcNMjQwODEwMDYxMzIyWjBuMRgwFgYDVQQDDA9U
ZW5wYXkuY29tIHNpZ24xEzARBgNVBAoMClRlbnBheS5jb20xHTAbBgNVBAsMFFRl
bnBheS5jb20gQ0EgQ2VudGVyMQswCQYDVQQGDAJDTjERMA8GA1UEBwwIU2hlblpo
ZW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDmb7jBAvG3bN7a4/d
6mM6wKefEjcO+Bl85EgdxoXCDkN+0mSxyGW+03+wePYGqs24U6Ab1m1VqrfnCWuC
guKEJSAk8mtRRki4gfs4OBhePVYGSEFkzKdtbF0ucw10pPElHG5Yrvd+L3hwbMnj
D4m0MfXzURcxR7CZ/LUmizK/lkMGvt734iATcb3vvZpYpTRW34mQXXpnzifV5RXg
h0wwMn28cpUqy9EwkgWEEdgRb/s0REeQFEPqFsPjnNffe8/aTETQJb+0W8cRK2IH
GINuhP3f8RSbGWmwKzI14b3xZEqBQlPFFDrvELvjtdo6OEHGq0k7JJsiyp0hmWIL
dWplAgMBAAGjgYEwfzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE8DBlBgNVHR8EXjBc
MFqgWKBWhlRodHRwOi8vZXZjYS5pdHJ1cy5jb20uY24vcHVibGljL2l0cnVzY3Js
P0NBPTFCRDQyMjBFNTBEQkMwNEIwNkFEMzk3NTQ5ODQ2QzAxQzNFOEVCRDIwDQYJ
KoZIhvcNAQELBQADggEBAFGyHl1bYh3qdh5Ssb6SSrVlLjzjoP3iPYckM6jFv78O
i24k+IsI8wAyM1dY3WkmI8bn8n47QjMqow6TxxtvvbEYzX0vAb6elev4c66diknb
P9jR+zu5H0NKR1HnoFrzgACG9Lf38P+1P2FNWbetCMUAjAAcw/7rlHbqYfOYz+YW
nLBkx4T4aJQduXLXpzVQx1xz6yZzq21oDqVZQq040XCoqVCGyfR4a+owV3cphOUJ
7EiV0Kkq9nN1vmEYSamINKx4h13pA5uYPxBTnZIXKcW/85IV2JF0Gv6XtUFmRlZo
eSBP4f3F+9aPs4tu2eOVxTLsWwia8ydXikFdK1zDubA=
-----END CERTIFICATE-----";
            //string formatKey = RsaKeyHelper.FormatKeyString(public_key);

            var    helper       = RsaKeyHelper.FromPemKeyString(public_key);
            var    n            = helper.RSACryptoServiceProvider();
            string pubKeyString = helper.GetKeyString();

            /*
             * var rsaService = helper.RSACryptoServiceProvider();
             * object pemObject;
             * using (StringReader sReader = new StringReader(pemKey))
             * {
             *  var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(sReader);
             *  pemObject = pemReader.ReadObject();
             * }
             * X509Certificate rsaKey = pemObject as X509Certificate;
             * var cer = new System.Security.Cryptography.X509Certificates.X509Certificate2();
             * cer.Import(rsaKey.GetEncoded());
             * var provider = new System.Security.Cryptography.RSACryptoServiceProvider();
             * provider.FromXmlString(cer.PublicKey.Key.ToXmlString(false));
             * Assert.IsTrue(rsaKey != null);
             */
        }
        public void FromPrivateKeyTest()
        {
            string pkcs1     = @"MIIEowIBAAKCAQEA8RKBv0kUVV+CmN3i3PvfuxqguzdbQgRxOUdZDeh+3sp23Fit
/8TNgw6BEYts1DDWIo+SFHeligQaZA/b28ZazdeElVR5rD7/lpue/MexT6L4V4Ae
qxXV3CUJ5cW5JHeSSZtWD9nK66Af4RdbdoLptczjC58GKiAnX0L3rcbtbAZGd5Vo
i7iiLXlvaoiQv7mifbwd46Dlxsw//OuaJJdjaZ1qfrox+IcbnftVXRDdMghUz6VC
NNJHAy4Mkf5eudstzis3vQmsioLSeCZMPs2qwnjbotZbrTWeHmAicT2AMN2tbhUu
9fHMSo+c5pRjVIXSNsKmYNjOWjySeE6ma79piwIDAQABAoIBACZnFFQsiBixhlRj
xGf/l7xumXw5bUgu/Ppq6zzT9KH5DsY7OjysVTCzdswcsdF7liEbTeIEzVIXJT0b
aaKxDnYMBwri0h8mSgDr+X+7L/vHslf+COSoLdFL9S+tN7kfcyZWoHcV8sVmVK2+
0ssmP6S+ZszLIGhFhwAd4ubD8b5rUlGFLXq1fNxO0PjAKwquVWlc8P+SwaWgfhyh
oz6UjmOvhcIP67stJ6yf78MMdnnP7IqmFRhRCS7PriLepcjyY67X1ZegN7snYBDF
ikrPFrP+Ru4fQ492r+rvt/dzQ/W5IlV/SYN/i3gdp+gl1e4L2IAEA2QX8y6J7L6I
ypqtlMECgYEA/vLUdyYGFx5znWAVKVDZQH0Iy87v5LL1eeR0XT85JvgxXwG8ZGve
RZHSD7y/6llgLk42ukwywp72f/FQs25Ng71XarNO1ulbdK+Zu/AqXO0WCdIRVPGp
VrZsfs6E9sGaprhUbPqG5hONn2GINNV6pvwBODJAJYRxdMBkmjeA5R8CgYEA8hEG
zbKF08sO6TMHnU9CdwAN5IIPuUU4kfw5QGvx1EWID8PdfT2U9ASFKt/Fb3SmbN31
gEwgXPcgR7W/TujgVXyiQfe8a2ts7WAMyGcgB7nM4AcnEb/O/c2TcgZ9zIAB5ZdO
nKRK8vliHMOuQ5ZYGkOrLghC85zHgSolEQXxohUCgYEAi3Y2Nz87kaX8xJfsu38Y
eKhtCWAX5ljm41jPNrsA/opCJ6CBd8Vx/0h3SliL+xwM+weZ9Gr+UWw3l2FgLecm
y+vlR97yP6nDd58fT6le4xpmNdUN2hOf+GkuDGfYYEsj2BN5S2v4Ix+LFyZ5Jb2p
rHKqEB2c7Wj3z0/3OE0oWy0CgYAJ7LbJsjsYbufimcwDIB/Kfz8Skl6Qqwzht2Sl
hod4u40TkGVBYEf+JT1Mf7Y5lp/IMOWC6Bwfk6ZIKmR4mMWx25VPfRfFk7b4mIqN
oOTITE7hFIn+iU20TDxyXV/FBa6OOkDn3TiRc7YZFdDMRprAIOwgzAfqsw/e9Npm
M0cv7QKBgADqZPqurugoZniWmZHk4m2UPXJso8ljlKrloZ3gclJiLRUWA/86UHVJ
7sjtH0kMF0UZ9yOzhRzoB5JjRreNBYCTKFqUfl7FLhDnDp/8X/YrE8qg7ZWXyMGV
pjg9xFMrBFaSKkx3eOgnhb7ErqJQi2E5XQ3F5IkCQTUbMB1zeGuu";
            string pkcs1_pub = @"-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8RKBv0kUVV+CmN3i3Pvf
uxqguzdbQgRxOUdZDeh+3sp23Fit/8TNgw6BEYts1DDWIo+SFHeligQaZA/b28Za
zdeElVR5rD7/lpue/MexT6L4V4AeqxXV3CUJ5cW5JHeSSZtWD9nK66Af4RdbdoLp
tczjC58GKiAnX0L3rcbtbAZGd5Voi7iiLXlvaoiQv7mifbwd46Dlxsw//OuaJJdj
aZ1qfrox+IcbnftVXRDdMghUz6VCNNJHAy4Mkf5eudstzis3vQmsioLSeCZMPs2q
wnjbotZbrTWeHmAicT2AMN2tbhUu9fHMSo+c5pRjVIXSNsKmYNjOWjySeE6ma79p
iwIDAQAB
-----END PUBLIC KEY-----";
            string pkcs8     = @"MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMKA2qJK/WDExpwn
d76KhHRUIFWE53PWV3Y6WpnRb7Lqh5XQToqgWp4SYjJVSxSl6AEDxpedLRqcqeb1
SOhpk8v/2l/NFKxwCd5rjoIvo16cbqn0vK6fS3e4Jh4L7xV09W3CbK4DGSYABejd
9a6aNTnE86tSA4BLSKNnGtFGDIeZAgMBAAECgYBYOBNyOusTogynNOuF+9O545JK
154XFyfSUwNW8vxjvSZEGBgXnkWbnqD1TWRheCJzm1/O0pZrlJUnUSeBaqmCuDyl
j+wfCVcN4h3wQDUcZ+GZII+MBRIyVaj3waswtxsZ1jrduP2Nae44gyuQwTsdn0h2
zMC600BaV5R5OV0t5QJBAP+lLDJvSG0Ic4jMTJMPRpRCdZgKZpr/779FlBMw/pT6
zq031zxiiMfaPYXjCWkuh2MEB2HIyfuL6zczFMnzoocCQQDCxfVgHqbkBsFVmKbp
3KoNnZf/BgFAwo7WX6t5/v8uE6P9LkJ07/frdtMp8d4aa4fX1C8IkCZMDua+5X+u
92zfAkEA6tmkZpjQ4kl3Sd7VIexQnHcJbKlxZUdlykNzKsZBuj9Git7XvkOPAHo/
NrZBuPzjp1TWK0C4PXxmk4k7ueM2FQJATRuDhbb8yP8noNRbF/BE3jkKiGp/Kn0b
gSDEyPo7Walq3Xtn0dWCZ5RWCp/3FqyFTdtxd0lh7/BiRyaiAslvLwJBAP5Qsqgu
ncySlApFMTDDMJ/jFcea8aVBu1mcVnlJJFdYH4MnvUAW3Ty7yG3K6/EO8XZnGOfI
ShVdgu+sAdrglqA=";
            //var helper0 = RsaKeyHelper.FromPrivateKey(File.ReadAllText(@"F:\Jason\certs\gpu\166064_private_pkcs1.pem"), RsaKeyHelper.KeyFormat.pkcs1);
            var helper1 = RsaKeyHelper.FromPemKeyString(pkcs1);

            var h = RsaKeyHelper.FromPemKeyString(pkcs1_pub);
            //var helper8 = RsaKeyHelper.FromPemPrivateKey(pkcs8, RsaKeyHelper.KeyFormat.pkcs8);

            string plain  = "123";
            string decode = "456";

            Assert.AreEqual(plain, decode);
            //Assert.AreEqual(helper1.Private, helper8.Private);
        }