C# 将RSACryptServiceProvider RSA XML密钥转换为PKCS8
我在我的C#代码中使用了rsacyptoserviceprovider,它运行良好,我可以导出RSA XML私钥和公钥,但出于某种原因,我需要将此密钥转换为*.pem格式(PKCS8未加密) 我的私钥像C# 将RSACryptServiceProvider RSA XML密钥转换为PKCS8,c#,security,rsa,rsacryptoserviceprovider,pkcs#8,C#,Security,Rsa,Rsacryptoserviceprovider,Pkcs#8,我在我的C#代码中使用了rsacyptoserviceprovider,它运行良好,我可以导出RSA XML私钥和公钥,但出于某种原因,我需要将此密钥转换为*.pem格式(PKCS8未加密) 我的私钥像 <RSAKeyValue> <Modulus>zYs6baSaRDgLc5fG3/ozwGwS8OAvxd9quE2su+7//Lnz2WuIbe8jMc5kL7p2gsPZUEoB88SFHdGZSYiZJhERDc/1iQ4VsW2/ra8DBW+1m3K33ED
<RSAKeyValue>
<Modulus>zYs6baSaRDgLc5fG3/ozwGwS8OAvxd9quE2su+7//Lnz2WuIbe8jMc5kL7p2gsPZUEoB88SFHdGZSYiZJhERDc/1iQ4VsW2/ra8DBW+1m3K33EDvvI3rJ0NIyuRNuwoYql3hYdY0cdW6Gru9ZARCpptgBSJEiUSPjlzDEXz3RaU=</Modulus>
<Exponent>AQAB</Exponent>
<P>89aDVrzNZuDfkCCUR6LKlxHul64zb4EBUN4vr6VZ4LrjEqT6m7+a/8lIrgSK03R1hDdOzeg79eS0OLH5cbe6xQ==</P>
<Q>18vAJpkwmhDSMjcPAE/4LufpZ6ukaOgkcPj9LngZSQlIt/D19LT/4NqZ2BrukX5bFCL6WPPLrJmmYlG/Jj+NYQ==</Q>
<DP>whMgoi7PxWyCRDLKEmJNoQQSxQNPyRYCuBzAE6sl6CqXhUVuefx9H81TXb4byMXOqxdiT5zh7IrFrsJo6cv0iQ==</DP>
<DQ>ylGZAZc2XfvPVo0QX3aadT+xMSVXq5OaNuD6XorzCerOZsZfkuHv1NyeyGHXskkJE0QH+0X3ewdDW4LQ+Ac1gQ==</DQ>
<InverseQ>v4nkldQ2UKhJUZiyJbKnp2xopzfmreDQTTtGbaF4X0UP5pDGJndmUhj1SHITUAVqwUBa+hSl8TvzcO4IRpkOFg==</InverseQ>
<D>JopbL9Dj7jO2DfwhGcE/7+4z1P+sZYVhbOJ/p5OGY1x4uUVdBQQIjN++0GY9r4JKnq/p0swAC9nPzMZ0tPsRP7gV5x7fmySlMP4tGpALDHbDgGfN098m2+JqK+/MIMYTAdLbnAcwk/1Lp8mB7Urm/OF/M0LOUzRQ1mwXVXNG/sE=</D>
</RSAKeyValue>
我对保安人员不是很专业,我不确定我们能不能把它转换成不?有人可以帮助您完成代码示例吗?您可以使用。以下是一个例子:
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.OpenSsl;
namespace DotNetToPkcs8Pem
{
public class DotNetToPkcs8Pem
{
public static void Convert(string privXmlFilename, string privPkcs8Filename) {
StringBuilder sb = new StringBuilder ();
string line;
var xmlIn = new StreamReader (privXmlFilename);
while ((line = xmlIn.ReadLine ()) != null) {
sb.Append (line);
}
var xmlKey = sb.ToString ();
var rsa = RSA.Create ();
rsa.FromXmlString (xmlKey);
var bcKeyPair = DotNetUtilities.GetRsaKeyPair(rsa);
var pkcs8Gen = new Pkcs8Generator (bcKeyPair.Private);
var pemObj = pkcs8Gen.Generate ();
var pkcs8Out = new StreamWriter (privPkcs8Filename, false);
var pemWriter = new PemWriter (pkcs8Out);
pemWriter.WriteObject (pemObj);
pkcs8Out.Close ();
}
public static void Main (string[] args)
{
var xmlFile = "exportedDotNetPrivKey.xml";
var pkcs8File = "privkey.pk8";
Convert (xmlFile, pkcs8File);
}
}
}
谢谢,你知道为什么Google chrome扩展包进程()不接受最后一个密钥吗?我知道这与征服者没有直接关系,但如果你知道答案,那就没有关系了。chrome扩展名.pem文件的规范如下()。谢谢,你提供的链接说你需要使用2048位的chrome扩展键;根据RFC,上面示例中1024位.File扩展名的密钥是*.p8:我只想要完全相反的功能,即从pkcs8格式到RSAKEpair格式。@Varsh:请搜索此站点,如果找不到答案,请发布新问题。
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.OpenSsl;
namespace DotNetToPkcs8Pem
{
public class DotNetToPkcs8Pem
{
public static void Convert(string privXmlFilename, string privPkcs8Filename) {
StringBuilder sb = new StringBuilder ();
string line;
var xmlIn = new StreamReader (privXmlFilename);
while ((line = xmlIn.ReadLine ()) != null) {
sb.Append (line);
}
var xmlKey = sb.ToString ();
var rsa = RSA.Create ();
rsa.FromXmlString (xmlKey);
var bcKeyPair = DotNetUtilities.GetRsaKeyPair(rsa);
var pkcs8Gen = new Pkcs8Generator (bcKeyPair.Private);
var pemObj = pkcs8Gen.Generate ();
var pkcs8Out = new StreamWriter (privPkcs8Filename, false);
var pemWriter = new PemWriter (pkcs8Out);
pemWriter.WriteObject (pemObj);
pkcs8Out.Close ();
}
public static void Main (string[] args)
{
var xmlFile = "exportedDotNetPrivKey.xml";
var pkcs8File = "privkey.pk8";
Convert (xmlFile, pkcs8File);
}
}
}