C# 从RSA密钥对获取私钥/公钥base64表示形式

C# 从RSA密钥对获取私钥/公钥base64表示形式,c#,rsa,digital-signature,C#,Rsa,Digital Signature,我想在C#中生成RSA密钥对。我能够获得键的xml字符串,但我需要它们的base64表示。这是我的xml代码 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); privateKeyXmlText = rsa.ToXmlString(true); publicKeyXmlText = rsa.ToXmlString(false); 但我想要的是 privateKeyStr=="MIICITAjBgoqhkiG9w0BD

我想在C#中生成RSA密钥对。我能够获得键的xml字符串,但我需要它们的base64表示。这是我的xml代码

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

privateKeyXmlText = rsa.ToXmlString(true);
publicKeyXmlText = rsa.ToXmlString(false);
但我想要的是

privateKeyStr=="MIICITAjBgoqhkiG9w0BDAEDMBUEEKaTCK5mE2MsQANxDAfaJe8CAQoEggH47qb6bFO+a2Fj...";
publicKeyStr == "MIIBKjCB4wYHKoZIzj0CATCB1wIBATAsBgcqhkjOPQEBAiEA/////wAA...";
有什么想法吗?

(回答来自)

公共静态函数ToBase64PemFromKeyXMLString=(xmlPrivateKey)=>
{
if(string.IsNullOrEmpty(xmlPrivateKey))
抛出新ArgumentNullException(“RSA密钥必须包含值!”);
var-keyContent=new-PemReader(new-StringReader(xmlprovatekey));
if(keyContent==null)
抛出新ArgumentNullException(“私钥无效!”);
var ciphrPrivateKey=(AsymmetricCipherKeyPair)keyContent.ReadObject();
var asymmetricKey=新的AsymmetricKeyEntry(ciphrPrivateKey.Private);
PrivateKeyInfo PrivateKeyInfo=PrivateKeyInfoFactory.CreatePrivateKeyInfo(asymmetricKey.Key);
var serializedPrivateKey=privateKeyInfo.ToAsn1Object().GetDeRecoded();
返回Convert.tobase64字符串(serializedPrivateKey);
};

对于Base64,选择标准容器格式,如PEM/DER:XML内容是Base64。只需提取这些。
public static Func<string, string> ToBase64PemFromKeyXMLString= (xmlPrivateKey) =>
        {
            if (string.IsNullOrEmpty(xmlPrivateKey))
                throw new ArgumentNullException("RSA key must contains value!");
            var keyContent = new PemReader(new StringReader(xmlPrivateKey));
            if (keyContent == null)
                throw new ArgumentNullException("private key is not valid!");
            var ciphrPrivateKey = (AsymmetricCipherKeyPair)keyContent.ReadObject();
            var asymmetricKey = new AsymmetricKeyEntry(ciphrPrivateKey.Private);

            PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(asymmetricKey.Key);
            var serializedPrivateKey = privateKeyInfo.ToAsn1Object().GetDerEncoded();
            return Convert.ToBase64String(serializedPrivateKey);
        };