如何在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:
看看这篇博文:http://pstaev.blogspot.com.es/2010/08/convert-rsa-public-key-from-xml-to-pem.html
请记住,openssl对PEM证书格式很挑剔。
- 文件必须包含:
-----BEGIN CERTIFICATE-----
在单独的行上(即必须以换行符结束)。 - 每行"gibberish"必须为64个字符宽。
- 文件必须以:
-----END CERTIFICATE-----
并以换行符结束。 - 不要用Word保存证书文本。必须是ASCII格式
- 不要混合DOS和UNIX风格的行终止符。
因此,在您的情况下,似乎您没有在64个字符处换行"胡言乱语",并且您的END标记缺少换行符。
对于那些没有自己编写密钥对的人,您可以采取以下几个步骤来规范化Linux上的证书文件:
- 通过dos2unix:
- 运行到fold:
# fold -w 64 cert.pem
# dos2unix cert.pem
运行如果你在Windows上,试着下载Cygwin,你应该能够得到这些转换工具