Read different certificate/key file formats with C#

Read a PEM X509 certificate / public key 

using System;
using System.IO;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using Microsoft.IdentityModel.Tokens;
(...)
X509Certificate2 cert = new X509Certificate2("THE_X509_PEM_FILE_PATH");
RsaSecurityKey rsaSecurityKey = new RsaSecurityKey(cert.GetRSAPublicKey());

Read a PEM PKCS1 private key 

using System;
using System.IO;
using System.Security.Cryptography;
using Microsoft.IdentityModel.Tokens;
(...)
string privateKeyPem = File.ReadAllText("THE_PEM_ENCODED_FILE_PATH");
// keeping only the payload of the key 
privateKeyPem = privateKeyPem.Replace("-----BEGIN RSA PRIVATE KEY-----", "");
privateKeyPem = privateKeyPem.Replace("-----END RSA PRIVATE KEY-----", "");
byte[] privateKeyRaw = Convert.FromBase64String(privateKeyPem);
// creating the RSA key 
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.ImportRSAPrivateKey(new ReadOnlySpan<byte>(privateKeyRaw), out _);
RsaSecurityKey rsaSecurityKey = new RsaSecurityKey(provider);

Read a PEM PKCS8 private key 

using System;
using System.IO;
using System.Security.Cryptography;
using Microsoft.IdentityModel.Tokens;
(...)
string privateKeyPem = File.ReadAllText("THE_PEM_ENCODED_FILE_PATH");
// keeping only the payload of the key
privateKeyPem = privateKeyPem.Replace("-----BEGIN PRIVATE KEY-----", "");
privateKeyPem = privateKeyPem.Replace("-----END PRIVATE KEY-----", "");
byte[] privateKeyRaw = Convert.FromBase64String(privateKeyPem);
// creating the RSA key 
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.ImportPkcs8PrivateKey(new ReadOnlySpan<byte>(privateKeyRaw), out _);
RsaSecurityKey rsaSecurityKey = new RsaSecurityKey(provider);

Read a binary encoded (DER) X509 certificate / public key 

using System;
using System.IO;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using Microsoft.IdentityModel.Tokens;
(...)
X509Certificate2 cert = new X509Certificate2("THE_BINARY_ENCODED_FILE_PATH");
RsaSecurityKey rsaSecurityKey = new RsaSecurityKey(cert.GetRSAPublicKey());

Read a binary encoded (DER) private key  

using System;
using System.IO;
using System.Security.Cryptography;
using Microsoft.IdentityModel.Tokens;
(...)
byte[] privateKeyDer = File.ReadAllBytes("THE_BINARY_ENCODED_FILE_PATH");
// creating the RSA key 
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.ImportRSAPrivateKey(new ReadOnlySpan<byte>(privateKeyDer), out _);
RsaSecurityKey rsaSecurityKey = new RsaSecurityKey(provider);

Read a PKC12 / PFX file to extract a key / certificate 

using System;
using System.IO;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using Microsoft.IdentityModel.Tokens;
(...)
X509Certificate2Collection collection = new X509Certificate2Collection();
// GetPassword() returns the password of the key / file. The password should not be hard coded. 
collection.Import("THE_PFX_FILE_PATH", GetPassword(), X509KeyStorageFlags.EphemeralKeySet);
foreach ( X509Certificate2 cert in collection )
{
	if ( "YOUR_KEY_ALIAS".Equals( cert.FriendlyName ) )
	{
		RsaSecurityKey rsaPublicSecurityKey = new RsaSecurityKey(cert.GetRSAPublicKey());
		RsaSecurityKey rsaPrivateSecurityKey = new RsaSecurityKey(cert.GetRSAPrivateKey());
		break;
	}
}