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

本文关键字:格式 密钥对 PEM 中将 xml | 更新日期: 2023-09-27 18:04:50

我尝试将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:

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

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

请记住,openssl对PEM证书格式很挑剔。

  1. 文件必须包含:-----BEGIN CERTIFICATE-----
  2. 在单独的行上(即必须以换行符结束)。
  3. 每行"gibberish"必须为64个字符宽。
  4. 文件必须以:-----END CERTIFICATE-----并以换行符结束。
  5. 不要用Word保存证书文本。必须是ASCII格式
  6. 不要混合DOS和UNIX风格的行终止符。

因此,在您的情况下,似乎您没有在64个字符处换行"胡言乱语",并且您的END标记缺少换行符。

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

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

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