/// <summary> /// Convert RSA Public Key from PEM to XML format /// </summary> /// <param name="publicKey">Public Key</param> /// <returns></returns> public static string PublicKeyPemToXml(string publicKey) { publicKey = RsaPemFormatHelper.PublicKeyFormat(publicKey); PemReader pr = new PemReader(new StringReader(publicKey)); object obj = pr.ReadObject(); if (!(obj is RsaKeyParameters rsaKey)) { throw new Exception("Public key format is incorrect"); } XElement publicElement = new XElement("RSAKeyValue"); XElement pubmodulus = new XElement("Modulus", Convert.ToBase64String(rsaKey.Modulus.ToByteArrayUnsigned())); XElement pubexponent = new XElement("Exponent", Convert.ToBase64String(rsaKey.Exponent.ToByteArrayUnsigned())); publicElement.Add(pubmodulus); publicElement.Add(pubexponent); return(publicElement.ToString()); }
/// <summary> /// Create an RSA parameter based on XML format public key /// </summary> /// <param name="publicKey"></param> /// <returns>RSAParameters</returns> protected sealed override RSAParameters CreateRsapFromPublicKey(string publicKey) { publicKey = RsaPemFormatHelper.PublicKeyFormat(publicKey); PemReader pr = new PemReader(new StringReader(publicKey)); object obj = pr.ReadObject(); if (!(obj is RsaKeyParameters rsaKey)) { throw new Exception("Public key format is incorrect"); } RSAParameters rsap = new RSAParameters(); rsap.Modulus = rsaKey.Modulus.ToByteArrayUnsigned(); rsap.Exponent = rsaKey.Exponent.ToByteArrayUnsigned(); return(rsap); }