c#.net 調用BouncyCastle生成PEM格式的私鑰和公鑰


            RsaKeyPairGenerator r = new RsaKeyPairGenerator();
            r.Init(new KeyGenerationParameters(new SecureRandom(), 1024));
            AsymmetricCipherKeyPair keys = r.GenerateKeyPair();

            AsymmetricKeyParameter private_key = keys.Private;
            AsymmetricKeyParameter public_key = keys.Public;

            TextWriter textWriter = new StringWriter();
            PemWriter pemWriter = new PemWriter(textWriter);
            pemWriter.WriteObject(keys.Private);
            pemWriter.Writer.Flush();

            string privateKey = textWriter.ToString();
            txtPri.Text = privateKey;


            TextWriter textpubWriter = new StringWriter();
            PemWriter pempubWriter = new PemWriter(textpubWriter);
            pempubWriter.WriteObject(keys.Public);
            pempubWriter.Writer.Flush();
            string pubKey = textpubWriter.ToString();
            txtPub.Text = pubKey;

-

引用:

using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Security;

--XML格式轉PEM格式,引用:http://www.jianshu.com/p/faefcc58c79b

 public static void XMLConvertToPEM()//XML格式密鑰轉PEM
    {
        var rsa2 = new RSACryptoServiceProvider();
        using (var sr = new StreamReader("e:\\PrivateKey.xml"))
        {
            rsa2.FromXmlString(sr.ReadToEnd());
        }
        var p = rsa2.ExportParameters(true);

        var key = new RsaPrivateCrtKeyParameters(
            new BigInteger(1, p.Modulus), new BigInteger(1, p.Exponent), new BigInteger(1, p.D),
            new BigInteger(1, p.P), new BigInteger(1, p.Q), new BigInteger(1, p.DP), new BigInteger(1, p.DQ),
            new BigInteger(1, p.InverseQ));

        using (var sw = new StreamWriter("e:\\PrivateKey.pem"))
        {
            var pemWriter = new Org.BouncyCastle.OpenSsl.PemWriter(sw);
            pemWriter.WriteObject(key);
        }
    }

網上示例都是從文件讀取出XML格式私鑰,存入PEM文件中,PEM中就是轉換好的格式。    

讀取XML私鑰的代碼可以換成生成XML私鑰,以下代碼是轉好格式存入字符串string 中。

public void xmlToPem()
        {
            CspParameters parameters = new CspParameters();
            parameters.KeyContainerName = DateTime.Now.ToString();
            //可以選擇導入XML格式的私鑰還是生成。無論是存儲在.XML文件中還是在數據庫等地方。      這里是新生成一個C# XML格式私鑰來轉成PEM格式。
            var rsa2 = new RSACryptoServiceProvider(parameters);
            //using (var sr = new StreamReader("e:\\PrivateKey.xml"))
            //{
            //    rsa2.FromXmlString(sr.ReadToEnd());
            //}
            var p = rsa2.ExportParameters(true);

            var key = new RsaPrivateCrtKeyParameters(
                new BigInteger(1, p.Modulus), new BigInteger(1, p.Exponent), new BigInteger(1, p.D),
                new BigInteger(1, p.P), new BigInteger(1, p.Q), new BigInteger(1, p.DP), new BigInteger(1, p.DQ),
                new BigInteger(1, p.InverseQ));

            using (TextWriter sw = new StringWriter())
            {
                var pemWriter = new Org.BouncyCastle.OpenSsl.PemWriter(sw);
                pemWriter.WriteObject(key);
                pemWriter.Writer.Flush();
                string priKey = sw.ToString();
            }
        }

XML公鑰轉PEM公鑰的代碼還未研究。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM