如何在C#中将xml格式的密钥对更改为PEM格式?

我尝试将创建的密钥对以xml格式更改为PEM格式。 这是我的代码。

CspParameters cspParams = new CspParameters(); cspParams.ProviderType = 1; cspParams.Flags = CspProviderFlags.UseArchivableKey; cspParams.KeyNumber = (int)KeyNumber.Exchange; rsaProvider = new RSACryptoServiceProvider(1024,cspParams); RSAParameters rsa_params = rsaProvider.ExportParameters(true); byte[] rsa_export = rsaProvider.ExportCspBlob(true); //here I've try to get private key data string data__ = Convert.ToBase64String(rsa_export); FileStream fs = new FileStream(privateKeyFileName, FileMode.CreateNew); string type = "RSA PRIVATE KEY"; string header = String.Format("-----BEGIN {0}-----\n", type); string footer = String.Format("\n-----END {0}-----", type); data__ = header+data__+footer; byte[] d_ = Encoding.Default.GetBytes(data__); //write to file fs.Write(d_, 0, d_.Length); fs.Close(); 

在我运行它之后,我有一个私钥,但是当我使用密钥测试时使用命令创建证书:

 openssl req -new -x509 -key privatekey.pvk -config "C:\AppServ\php5\extras\openssl\openssl.cnf" -out myCert.cer -days 365 

发生错误

 unable to load Private Key 3004:error:0906D064:PEM routines:PEM_read_bio:bad base64 decode:.\crypto\pem\pem_lib.c:756: 

看一下这篇博客文章: http : //pstaev.blogspot.com.es/2010/08/convert-rsa-public-key-from-xml-to-pem.html

请记住,openssl对于PEM证书格式是挑剔的。

  1. 该文件必须包含: -----BEGIN CERTIFICATE-----在一个单独的行上(即必须以换行符终止)。
  2. 每行“乱码”必须是64个字符宽。
  3. 该文件必须以: -----END CERTIFICATE-----结束,并以换行符结束。
  4. 不要使用Word保存证书文本。 它必须是ASCII。
  5. 不要混用DOS和UNIX样式的行终止。

因此,在您的情况下,您似乎没有以64个字符包装“乱码”,并且您的END标记缺少换行符。

对于没有编写自己的密钥对的其他人,您可以采取以下几个步骤来规范化Linux上的证书文件:

  1. 通过dos2unix运行它: # dos2unix cert.pem
  2. 通过fold运行它: # fold -w 64 cert.pem

如果你在Windows上,尝试下载Cygwin ,你应该能够获得这些转换工具。