using System;
using System.Text;
using System.Security.Cryptography;
using System.Web;
using System.IO;namespace Thinhunan.Cnblogs.Com.RSAUtility
{public class PemConverter{/// <summary>/// 将pem格式公钥转换为RSAParameters/// </summary>/// <param name="pemFileConent">pem公钥内容</param>/// <returns>转换得到的RSAParamenters</returns>public static RSAParameters ConvertFromPemPublicKey(string pemFileConent){if (string.IsNullOrEmpty(pemFileConent)){throw new ArgumentNullException("pemFileConent", "This arg cann't be empty.");}pemFileConent = pemFileConent.Replace("-----BEGIN PUBLIC KEY-----", "").Replace("-----END PUBLIC KEY-----", "").Replace("\n", "").Replace("\r", "");byte[] keyData = Convert.FromBase64String(pemFileConent);if (keyData.Length < 162){throw new ArgumentException("pem file content is incorrect.");}byte[] pemModulus = new byte[128];byte[] pemPublicExponent = new byte[3];Array.Copy(keyData, 29, pemModulus, 0, 128);Array.Copy(keyData, 159, pemPublicExponent, 0, 3);RSAParameters para = new RSAParameters();para.Modulus = pemModulus;para.Exponent = pemPublicExponent;return para;}/// <summary>/// 将pem格式私钥转换为RSAParameters/// </summary>/// <param name="pemFileConent">pem私钥内容</param>/// <returns>转换得到的RSAParamenters</returns>public static RSAParameters ConvertFromPemPrivateKey(string pemFileConent){if (string.IsNullOrEmpty(pemFileConent)){throw new ArgumentNullException("pemFileConent", "This arg cann't be empty.");}pemFileConent = pemFileConent.Replace("-----BEGIN RSA PRIVATE KEY-----", "").Replace("-----END RSA PRIVATE KEY-----", "").Replace("\n", "").Replace("\r","");byte[] keyData = Convert.FromBase64String(pemFileConent);if (keyData.Length < 609){throw new ArgumentException("pem file content is incorrect.");}int index = 11;byte[] pemModulus = new byte[128];Array.Copy(keyData, index, pemModulus, 0, 128);index += 128;index += 2;//141byte[] pemPublicExponent = new byte[3];Array.Copy(keyData, index, pemPublicExponent, 0, 3);index += 3;index += 4;//148byte[] pemPrivateExponent = new byte[128];Array.Copy(keyData, index , pemPrivateExponent, 0, 128);index += 128;index += ((int)keyData[index+1] == 64?2: 3);//279byte[] pemPrime1 = new byte[64];Array.Copy(keyData, index, pemPrime1, 0, 64);index += 64;index += ((int)keyData[index + 1] == 64 ? 2 : 3);//346byte[] pemPrime2 = new byte[64];Array.Copy(keyData, index , pemPrime2, 0, 64);index += 64;index += ((int)keyData[index + 1] == 64 ? 2 : 3);//412/413byte[] pemExponent1 = new byte[64];Array.Copy(keyData,index, pemExponent1, 0, 64);index += 64;index += ((int)keyData[index + 1] == 64 ? 2 : 3);//479/480byte[] pemExponent2 = new byte[64];Array.Copy(keyData, index, pemExponent2, 0, 64);index += 64;index += ((int)keyData[index + 1] == 64 ? 2 : 3);//545/546byte[] pemCoefficient = new byte[64];Array.Copy(keyData, index, pemCoefficient, 0, 64);RSAParameters para = new RSAParameters();para.Modulus = pemModulus;para.Exponent = pemPublicExponent;para.D = pemPrivateExponent;para.P = pemPrime1;para.Q = pemPrime2;para.DP = pemExponent1;para.DQ = pemExponent2;para.InverseQ = pemCoefficient;return para;}}
}测试pem导成RSAParameters成功,使用通过:
using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;
using System.Web;namespace Thinhunan.Cnblogs.Com.RSAUtility
{class Program{#region keysconst string PUBLICKEY =
@"-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDpsDr+W45aFHIkvotZaGK/THlF
FpuZfUtghhWkHAm3H7yvL42J4xHrTr6IeUDCl4eKe6qiIgvYSNoL3u4SERGOeYmV
1F+cocu9IMGnNoicbh1zVW6e8/iGT3xaYQizJoVuWA/TC/zdds2ihCJfHDBDsouO
CXecPapyWCGQNsH5sQIDAQAB
-----END PUBLIC KEY-----";const string PRIVATEKEY =
@"-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDpsDr+W45aFHIkvotZaGK/THlFFpuZfUtghhWkHAm3H7yvL42J
4xHrTr6IeUDCl4eKe6qiIgvYSNoL3u4SERGOeYmV1F+cocu9IMGnNoicbh1zVW6e
8/iGT3xaYQizJoVuWA/TC/zdds2ihCJfHDBDsouOCXecPapyWCGQNsH5sQIDAQAB
AoGBAM/JbFs4y5WbMncrmjpQj+UrOXVOCeLrvrc/4kQ+zgCvTpWywbaGWiuRo+cz
cXrVQ6bGGU362e9hr8f4XFViKemDL4SmJbgSDa1K71i+/LnnzF6sjiDBFQ/jA9SK
4PYrY7a3IkeBQnJmknanykugyQ1xmCjbuh556fOeRPaHnhx1AkEA/flrxJSy1Z+n
Y1RPgDOeDqyG6MhwU1Jl0yJ1sw3Or4qGRXhjTeGsCrKqV0/ajqdkDEM7FNkqnmsB
+vPd116J6wJBAOuNY3oOWvy2fQ32mj6XV+S2vcG1osEUaEuWvEgkGqJ9co6100Qp
j15036AQEEDqbjdqS0ShfeRSwevTJZIap9MCQCeMGDDjKrnDA5CfB0YiQ4FrchJ7
a6o90WdAHW3FP6LsAh59MZFmC6Ea0xWHdLPz8stKCMAlVNKYPRWztZ6ctQMCQQC8
iWbeAy+ApvBhhMjg4HJRdpNbwO6MbLEuD3CUrZFEDfTrlU2MeVdv20xC6ZiY3Qtq
/4FPZZNGdZcSEuc3km5RAkApGkZmWetNwDJMcUJbSBrQMFfrQObqMPBPe+gEniQq
Ttwu1OULHlmUg9eW31wRI2uiXcFCJMHuro6iOQ1VJ4Qs
-----END RSA PRIVATE KEY-----";#endregionstatic void Main(string[] args){           TestSignAndVerify();}public static void TestSignAndVerify(){//signRSAParameters para = PemConverter.ConvertFromPemPrivateKey(PRIVATEKEY);RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();rsa.ImportParameters(para);byte[] testData = Encoding.UTF8.GetBytes("hello");MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();byte[] signData = rsa.SignData(testData, md5);//verifyRSAParameters paraPub = PemConverter.ConvertFromPemPublicKey(PUBLICKEY);RSACryptoServiceProvider rsaPub = new RSACryptoServiceProvider();rsaPub.ImportParameters(paraPub);if (rsaPub.VerifyData(testData, md5, signData)){Console.WriteLine("ok");}else{Console.WriteLine("no");}}}
}

原文地址:http://www.itstrike.cn/Question/-NET-generates-pem-using-OpenSSL-key-file

转载于:https://www.cnblogs.com/JuneZhang/p/7424139.html

.NET使用OpenSSL生成的pem密钥文件[1024位]相关推荐

  1. LKT系列加密芯片如何预置openssl生成的rsa密钥完成运算(二)

    第二篇 openssl生成的rsa密钥如何写入到加密芯片中 1.测试目标 将openssl生成的RSA1024位密钥写入到LKT系列加密芯片的公私钥文件中 2.测试环境 本示例运行环境为windows ...

  2. PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解...

    一.公钥加密 假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个 ...

  3. LKT系列加密芯片如何预置openssl生成的rsa密钥完成运算

    第一篇 openssl密钥参数与LKT加密芯片密钥参数的对应关系 1.测试目标 将openssl生成的RSA1024位密钥与LKT系列加密芯片中的公私钥文件参数对应起来. 2.测试环境 本示例运行环境 ...

  4. LKT系列加密芯片如何预置openssl生成的rsa密钥完成运算(三)

    第三篇 如何使用加密芯片完成RSA运算 1.测试目标 使用已经预置RSA密钥的LKT系列加密芯片完成运算 2.测试环境 本示例运行环境为windows系统.测试软件LCS KIT.LKT-K100开发 ...

  5. 支付宝RSA密钥生成器1024位

    Windows下载工具地址:https://os.alipayobjects.com/download/secret_key_tools_RSA_win.zip MAC OSX下载:https://o ...

  6. 怎样生成CSR证书请求文件

    在安装数字证书时,需要准备CSR证书请求文件,使用SSL工具CSR生成器:https://csr.wiki 即可在线自助生成 CSR和密钥文件,另外一种方法使用openSSL/Keytools在服务器 ...

  7. 使用ET199加密锁存储TrueCrypt的密钥文件

    首先,当然是得准备一个空白的ET199加密锁,该锁质量上乘,价格便宜,非常适合个人使用. T宝上出售的非常多,只需要注意一定要购买原厂正品. 对ET199锁进行操作,不需要其他的软件,仅需要访问厂商的 ...

  8. 妙借Git自带的OpenSSL生成RSA公私钥的.pem 文件

    大家好,我是神韵,是一个技术&生活博主.出文章目的主要是两个,一是好记忆不如烂笔头,记录总结中提高自己.二是希望我的文章可以帮到大家.欢迎来点赞打卡,你们的行动将是我无限的动力. 本篇主题是: ...

  9. 关于PEM, DER, CRT, CER,KEY等各类证书与密钥文件后缀的解释

    文章目录 1. PEM文件 2. DER文件 PEM与DER的相互转换 3. 各种密钥证书文件解释 3.1 [ .csr ] 3.2 [ .key ] 3.3 [ .crt ] [ .cert ] [ ...

最新文章

  1. 深度报告:中国将主宰5G时代?华为中兴的最大机会来了
  2. MySQL 5.1中IN查询不要用到NULL条件
  3. [算法]链表的逆序遍历节点
  4. activity 启动模式_Intent#FLAG_ACTIVITY_CLEAR_TOP 真的会 clear top 吗
  5. wxWidgets:wxLayoutAlgorithm类用法
  6. 关闭或开启memory_target
  7. Zookeeper概念学习系列之zookeeper是什么?
  8. Delphi手机短信
  9. python selenium+pywin32 实现网页另存为
  10. Unity中的资源管理-资源类型和基本使用
  11. Lambda表达式的练习1
  12. Added a key not lexically larger than previous.
  13. python plot画柱状图_matplotlib使用:画柱状图
  14. d3.js一个面积图的案例(包含brush与zoom)
  15. postman 不安全网站_Postman amp; Proxy amp; Interceptor
  16. TestNG入门指南
  17. 人脸识别系统具有哪些管理功能
  18. MAC 系统安装 Go 语言:从零开始搭建 Go 开发环境
  19. 计算机应用基础上机ppt,PowerPoint操作题
  20. 程序员工资可以比别人低,但是斗图撩妹不能怂!

热门文章

  1. asp.net断点续传技术
  2. android使用webview上传文件,Android项目中如何在webview页面中上传文件
  3. kafka集群为什么需要三个节点_每天处理千亿级日志量,Kafka是如何做到的?
  4. centos 7 局域网丢包排查_Nginx搭建局域网yum源问题补充及解决思路与方法转发收藏...
  5. python 空指针_python 空指针
  6. 重庆社区计算机考试题库,2020重庆社区工作者考试题库:模拟题100题(64)
  7. mysql去重保留最后一个_MySQL-去重留一
  8. java正则截取xml节点_实例讲述Java使用正则表达式截取重复出现的XML字符串功能...
  9. c 语言 声明 定义,C/C++语言声明与定义详解
  10. 力扣(LeetCode)刷题,简单+中等题(第26期)