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公鑰的代碼還未研究。