var rsaPrivate = PEMToXML_All(_Config.RSAPrivate);//私鑰_Config.RSAPrivate
#region PEM轉XML
/// <summary>
/// PEM格式的密鑰轉XML格式
/// </summary>
/// <param name="pemkey">pem格式的密鑰</param>
/// <param name="isprikey">true:私鑰;false:公鑰</param>
/// <returns>xml格式密鑰</returns>
public static string PEMToXML_All(string pemkey)
{
// 將PEM格式的密鑰中的私鑰標識替換為空
pemkey = pemkey.Replace("-----BEGIN PRIVATE KEY-----", "").Replace("-----END PRIVATE KEY-----", "");
// 聲明變量
string rsaKey = string.Empty;
object pemObject = null;
RSAParameters rsaPara = new RSAParameters();
// 從字符串讀取PEM格式的密鑰
using (StringReader sReader = new StringReader(pemkey))
{
var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(sReader);
pemObject = pemReader.ReadObject();
}
// 獲取RSA私鑰參數
RsaPrivateCrtKeyParameters key = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(pemkey));
rsaPara = new RSAParameters
{
Modulus = key.Modulus.ToByteArrayUnsigned(),
Exponent = key.PublicExponent.ToByteArrayUnsigned(),
D = key.Exponent.ToByteArrayUnsigned(),
P = key.P.ToByteArrayUnsigned(),
Q = key.Q.ToByteArrayUnsigned(),
DP = key.DP.ToByteArrayUnsigned(),
DQ = key.DQ.ToByteArrayUnsigned(),
InverseQ = key.QInv.ToByteArrayUnsigned(),
};
// 將RSA私鑰參數導入到RSACryptoServiceProvider對象
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(rsaPara);
// 將RSACryptoServiceProvider對象轉換為XML格式的字符串
using (StringWriter sw = new StringWriter())
{
sw.Write(rsa.ToXmlString(true));
rsaKey = sw.ToString();
}
return rsaKey;
}
#endregion