如何将XML格式的RSA私钥读取并赋值到C#变量
如何将XML格式的RSA私钥赋值到C#变量
方法1:直接定义为字符串常量
和你给出的PEM格式示例逻辑一致,XML私钥可以直接作为字符串常量赋值,推荐用C#的逐字字符串(@前缀),无需处理XML中<、>等特殊字符的转义:
private const string RsaPrivateKeyXml = @"<RSAKeyValue><Modulus>s9vdfnfgyMbqIL31eQX35eA/pdM2uwm8MSxv36t0irpuMYuObR210kWCFCu/n766jZ3c5LNtmeRfo5AA8UDMafJ6EtZQnUx76rEeMJobDRgWrUdTb9x5EEmcL0um/vijOjI5Lk8PVqjg5tCJ19E8A8oK5dkc2MPDq15ksGnT40b9/TMocSSedNcCc4JTfCBWv4KXAm7s+Gty/y47LfOTwu2MEEECSYfPQZ3CKhkxXX0SwgDYMJW0ou1yOdeQPehIkxSjt9Ynd20zw2AyjsmMvb0T635dJlSLzmVTV5HYo9Aghgq7lY1NH+BrMJ+keMhzQC+wUwa+wv2x/mCIzX2y+Q==</Modulus><Exponent>AQAB</Exponent><P>y9MxLWJ4URJUWLwwJC/P08rxeP0KZDJ5JD+0kCDDFRqlMI41jF5VVllbxokZaqOpQaMIFvPMwHR3etqT9n90ZYZKORC6TGvdaHJ/ewWpCtMrLusG5ypCHXfPiLL425yTaBaDSbbnHV3ooPL4GWX1n9+GAr1EsoGodNYyBzEnb1M=</P><Q>4eYnmYJtSpyv3995eQk0uIAV4Q8ijHbBtUp8iK2k92pIyascnMdpglbNSGwPF+siwbtN/4VvZZXjHbWMe2KbhqcR6wlH+nxtyQWzBRKCEsG+JTmS4TBKwpKC5sFv3+C17CCB/L2zvGrR0vW5JErQ0KmWzbPqL20A4ViKc+QvZwM=</Q><DP>qbd+2VWG7aqfhQud4mPVX3s6ug2pG2lTqbVJ+kDtb6MyLU4clHbwA+iAHL6H5V3FT5wa3lG/Cflwi2F5luTl3KuHHiEpnvyp7ZB5ScyaxyKycGzO4Kk1SCg9LIwp32Nu8lrckwKzSqapT2tA3pUhgy+x/JHwo9qGlFLOcWKifXU=</DP><DQ>gDQowTx+XlvyjLG9tO1+mD9JK4N1bhZv9T2i08cI2sndKWcNRAUAYlJ1CucY4dA215A/wgaupA6e6NuCMPxTm+Xxi1ynFwfLHs03Pme0noSKL4IvU9Iee7K+y8t4fKyBUtNYMmJPQV22W23Nd0VmoSW+SlwTSnsohrvDR+Z26JU=</DQ><InverseQ>PO6hut+3R4JqDVgWxZ6uia+1NmH0ywXwr/wuxzj9/IOSD1nJOsBWSOqge6qXe9IBbTdpS0RAdV7g96O/DgiD+nhZoC4eOx2GNehnhaGWzHa+jPGP57Gy1v7IF7uKOaSbnAarEWq8i/dQxwhyKnVQ6lMaLGrT5BxDalTJKof80Nc=</InverseQ><D>C9QLzwNnPw0F3L1hZWIlGXMT/H3VfZt4SuuXN+h4s57rHEsHRNnNWVTE5zqxUXojnqihHFFIhfRk7cbMqREP4G/X42FAz/d1tsuLJrsbyFKrOx4TuKmRNKcCpIGfK+mCIpOm+wqsAZD9qXBRgGX8QmuJJ/CNWxwUxDJjAM8U5j9qteuouqZyMjxYld9krSkouVxZeACC7VpO3UjAd/QfIs6p8q6mjRnsTUiVeIfTlzhBwNY8AyjaneIaenTWhEfIW9A0ZFbIz+D2sacBs5dbzB2Q4S2rM3OgMjbj0c6kYiI/UXsUZuRK/ZI7nvlovQKU1yFgo+OkXDpoB1HMrS2xGQ==</D> </RSAKeyValue>";
如果偏好你提供的PEM示例那种多行拼接格式,也可以拆分内容逐行拼接:
private const string RsaPrivateKeyXml = "<RSAKeyValue><Modulus>s9vdfnfgyMbqIL31eQX35eA/pdM2uwm8MSxv36t0irpuMYuObR210kWCFCu/n766jZ3c5LNtmeRfo5AA8UDMafJ6EtZQnUx76rEeMJobDRgWrUdTb9x5EEmcL0um/vijOjI5Lk8PVqjg5tCJ19E8A8oK5dkc2MPDq15ksGnT40b9/TMocSSedNcCc4JTfCBWv4KXAm7s+Gty/y47LfOTwu2MEEECSYfPQZ3CKhkxXX0SwgDYMJW0ou1yOdeQPehIkxSjt9Ynd20zw2AyjsmMvb0T635dJlSLzmVTV5HYo9Aghgq7lY1NH+BrMJ+keMhzQC+wUwa+wv2x/mCIzX2y+Q==</Modulus>" + "<Exponent>AQAB</Exponent>" + "<P>y9MxLWJ4URJUWLwwJC/P08rxeP0KZDJ5JD+0kCDDFRqlMI41jF5VVllbxokZaqOpQaMIFvPMwHR3etqT9n90ZYZKORC6TGvdaHJ/ewWpCtMrLusG5ypCHXfPiLL425yTaBaDSbbnHV3ooPL4GWX1n9+GAr1EsoGodNYyBzEnb1M=</P>" + "<Q>4eYnmYJtSpyv3995eQk0uIAV4Q8ijHbBtUp8iK2k92pIyascnMdpglbNSGwPF+siwbtN/4VvZZXjHbWMe2KbhqcR6wlH+nxtyQWzBRKCEsG+JTmS4TBKwpKC5sFv3+C17CCB/L2zvGrR0vW5JErQ0KmWzbPqL20A4ViKc+QvZwM=</Q>" + "<DP>qbd+2VWG7aqfhQud4mPVX3s6ug2pG2lTqbVJ+kDtb6MyLU4clHbwA+iAHL6H5V3FT5wa3lG/Cflwi2F5luTl3KuHHiEpnvyp7ZB5ScyaxyKycGzO4Kk1SCg9LIwp32Nu8lrckwKzSqapT2tA3pUhgy+x/JHwo9qGlFLOcWKifXU=</DP>" + "<DQ>gDQowTx+XlvyjLG9tO1+mD9JK4N1bhZv9T2i08cI2sndKWcNRAUAYlJ1CucY4dA215A/wgaupA6e6NuCMPxTm+Xxi1ynFwfLHs03Pme0noSKL4IvU9Iee7K+y8t4fKyBUtNYMmJPQV22W23Nd0VmoSW+SlwTSnsohrvDR+Z26JU=</DQ>" + "<InverseQ>PO6hut+3R4JqDVgWxZ6uia+1NmH0ywXwr/wuxzj9/IOSD1nJOsBWSOqge6qXe9IBbTdpS0RAdV7g96O/DgiD+nhZoC4eOx2GNehnhaGWzHa+jPGP57Gy1v7IF7uKOaSbnAarEWq8i/dQxwhyKnVQ6lMaLGrT5BxDalTJKof80Nc=</InverseQ>" + "<D>C9QLzwNnPw0F3L1hZWIlGXMT/H3VfZt4SuuXN+h4s57rHEsHRNnNWVTE5zqxUXojnqihHFFIhfRk7cbMqREP4G/X42FAz/d1tsuLJrsbyFKrOx4TuKmRNKcCpIGfK+mCIpOm+wqsAZD9qXBRgGX8QmuJJ/CNWxwUxDJjAM8U5j9qteuouqZyMjxYld9krSkouVxZeACC7VpO3UjAd/QfIs6p8q6mjRnsTUiVeIfTlzhBwNY8AyjaneIaenTWhEfIW9A0ZFbIz+D2sacBs5dbzB2Q4S2rM3OgMjbj0c6kYiI/UXsUZuRK/ZI7nvlovQKU1yFgo+OkXDpoB1HMrS2xGQ==</D>" + "</RSAKeyValue>";
方法2:从XML文件读取(更推荐)
如果私钥存放在单独的XML文件中,直接读取文件内容到变量更便于维护:
// 读取XML私钥文件内容到字符串变量 string rsaPrivateKeyXml = File.ReadAllText(@"你的私钥文件路径.xml"); // 直接导入到RSA对象使用 using var rsa = RSA.Create(); rsa.FromXmlString(rsaPrivateKeyXml);
注意事项
- 逐字字符串会保留所有换行和空格,适合直接复制粘贴XML内容。
- 拼接格式要确保每行字符串首尾无多余空格,避免XML格式错误。
- .NET原生支持这种XML格式的RSA密钥,导入时直接调用
FromXmlString方法即可。
内容的提问来源于stack exchange,提问作者RahulK
相关产品推荐
相关产品推荐

