1、第一步先用openssl将pem的key转换为der的key //E:\01Doc\bin>openssl.exe rsa -in rsakeydec.pem -outform der -out pri.der
2、调用下面的程序直接读取der转换为c#所需要的xml Key,之后进行密文解密
3、openssl下载地址
http://download.csdn.net/download/jiayanhui2877/4089521

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Security.Cryptography;
using System.ComponentModel;
using System.Runtime.InteropServices;/*refer: http://q.cnblogs.com/q/70822/ http://blog.chinaunix.net/uid-26729093-id-4449165.html*/
namespace ConsoleApplication1
{class Program{private static int GetIntegerSize(BinaryReader binr){byte bt = 0;byte lowbyte = 0x00;byte highbyte = 0x00;int count = 0;bt = binr.ReadByte();if (bt != 0x02)        //expect integerreturn 0;bt = binr.ReadByte();if (bt == 0x81)count = binr.ReadByte();    // data size in next byteelseif (bt == 0x82){highbyte = binr.ReadByte();    // data size in next 2 byteslowbyte = binr.ReadByte();byte[] modint = { lowbyte, highbyte, 0x00, 0x00 };count = BitConverter.ToInt32(modint, 0);}else{count = bt;        // we already have the data size}while (binr.ReadByte() == 0x00){    //remove high order zeros in datacount -= 1;}binr.BaseStream.Seek(-1, SeekOrigin.Current);        //last ReadByte wasn't a removed zero, so back up a bytereturn count;}//E:\01Doc\010技术文档\openssl-1.0.2a\OpenSSL_SrcandLib\win32lib\bin>openssl.exe r//sa -in rsakeydec.txt -outform der -out pri.der//writing RSA keypublic static RSACryptoServiceProvider DecodeRSAPrivateKey(string priKey){//var privkey = Convert.FromBase64String(priKey);byte[] MODULUS, E, D, P, Q, DP, DQ, IQ;// ---------  Set up stream to decode the asn.1 encoded RSA private key  ------//MemoryStream mem = new MemoryStream(privkey);//BinaryReader binr = new BinaryReader(mem);string path = @"D:\\project\\ConsoleApplication1\\li_pri.der";  FileStream fs = new FileStream(path, FileMode.Open,FileAccess.Read);  BinaryReader binr = new BinaryReader(fs);    //wrap Memory Stream with BinaryReader for easy readingbyte bt = 0;ushort twobytes = 0;int elems = 0;try{twobytes = binr.ReadUInt16();if (twobytes == 0x8130) //data read as little endian order (actual data order for Sequence is 30 81)binr.ReadByte();        //advance 1 byteelse if (twobytes == 0x8230)binr.ReadInt16();       //advance 2 byteselsereturn null;twobytes = binr.ReadUInt16();if (twobytes != 0x0102) //version numberreturn null;bt = binr.ReadByte();if (bt != 0x00)return null;//------  all private key components are Integer sequences ----elems = GetIntegerSize(binr);MODULUS = binr.ReadBytes(elems);elems = GetIntegerSize(binr);E = binr.ReadBytes(elems);elems = GetIntegerSize(binr);D = binr.ReadBytes(elems);elems = GetIntegerSize(binr);P = binr.ReadBytes(elems);elems = GetIntegerSize(binr);Q = binr.ReadBytes(elems);elems = GetIntegerSize(binr);DP = binr.ReadBytes(elems);elems = GetIntegerSize(binr);DQ = binr.ReadBytes(elems);elems = GetIntegerSize(binr);IQ = binr.ReadBytes(elems);// ------- create RSACryptoServiceProvider instance and initialize with public key -----RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();RSAParameters RSAparams = new RSAParameters();RSAparams.Modulus = MODULUS;RSAparams.Exponent = E;RSAparams.D = D;RSAparams.P = P;RSAparams.Q = Q;RSAparams.DP = DP;RSAparams.DQ = DQ;RSAparams.InverseQ = IQ;RSA.ImportParameters(RSAparams);return RSA;}catch (Exception e){Console.WriteLine(e.Message + e.StackTrace);return null;}finally{binr.Close();}}/************************************************************************//* 你的是pem key,需要下转换为c# rsa provider认识的key。首先,干掉头部和尾部的无用字符,然后利用如下方法转换:*//************************************************************************/public static void PrivateKeyDecFun(){string priKey = @"-----BEGIN RSA PRIVATE KEY-----MIICWwIBAAKBgQCf1a4LQyipBqeUCZ9kKsfasQzkEFCBmGsM21Sakb5BO0sY07GDcproJHF2xNQrV0cM7+liE3pBUFsarui2WaHZhAibpLbl9z4FSfoN5hSg6sEgbB17SvKe3ZN/75GoEsQiQtYW4gUJgzrBovVZ+TeTnN+NHHBqUqBKhNIgPFVapQIDAQABAoGAG0OMs5kaF3LuJN9bU+/ENXab908dHG4OXJwRG2ie5muhzLNXhU+IQu7sd9DtTBNQKFHIIpWl9fwp/iw1v90cMUQGj0zhSXHAz7Vak/ryQLTyeIIciL8MQWvnbAaNlIoFq2wBl7SYs3n71B4MlvvTysaG0krsjiPh5LVgnBvzjGECQQDcAwe4XnF7SHWOnfljrG29soKNiUhYKtDGcV9fvam9u50Ek882wvFmsJP+tk+1CXjMRSNlOi40bxKCuaBa1JOtAkEAufq9FmZHfBFf3e6n57wLiAj5C1MeyHAtt6qdAF49OZJBGZh1pePnjDGNezFvy7U5bMp7/updisLCFueS5eKB2QJAF84QIMe/OZqedZ7sI/e9LABLlerbtAZ17nLH4gEQg6HwHFWt3vv6yKSkbrPlLe5nbpqweLxx0WSPOSvCiPFlRQJAPAfFNQ+6jz+EdDxukgxOpJBQ4ujnjMc42ooFt3KzzHt66+ocP3m66bOs+VDRxy0t5gHN2FCJ9Ro8T+xbrDxasQJAARHpcG6tE0F+lmUthtep1U8OrF+AQvqDhBq8MYK+/pF/LRZkFHkqTsj89OyWDlSH3LeYkOWsr9mAFxsvHZ9BSA==-----END RSA PRIVATE KEY-----";priKey = priKey.Replace("-----BEGIN RSA PRIVATE KEY-----", "").Replace("-----END RSA PRIVATE KEY-----", "");RSACryptoServiceProvider rsaProvider = DecodeRSAPrivateKey(priKey);//RSACryptoServiceProvider rsaProvider = DecodeRSAPrivateKey();//rsaProvider.FromXmlString();String PrivateKey = rsaProvider.ToXmlString(true);//将RSA算法的私钥导出到字符串PrivateKey中,参数为true表示导出私钥Console.WriteLine(PrivateKey);/************************************************************************//* 程序运行结果如下:* <RSAKeyValue><Modulus>n9WuC0MoqQanlAmfZCrH2rEM5BBQgZhrDNtUmpG+QTtLGNOxg3Ka6CRxdsTUK1dHDO/pYhN6QVBbGq7otlmh2YQIm6S25fc+BUn6DeYUoOrBIGwde0rynt2Tf++RqBLEIkLWFuIFCYM6waL1Wfk3k5zfjRxwalKgSoTSIDxVWqU=</Modulus><Exponent>AQAB</Exponent><P>3AMHuF5xe0h1jp35Y6xtvbKCjYlIWCrQxnFfX72pvbudBJPPNsLxZrCT/rZPtQl4zEUjZTouNG8SgrmgWtSTrQ==</P><Q>ufq9FmZHfBFf3e6n57wLiAj5C1MeyHAtt6qdAF49OZJBGZh1pePnjDGNezFvy7U5bMp7/updisLCFueS5eKB2Q==</Q><DP>F84QIMe/OZqedZ7sI/e9LABLlerbtAZ17nLH4gEQg6HwHFWt3vv6yKSkbrPlLe5nbpqweLxx0WSPOSvCiPFlRQ==</DP><DQ>PAfFNQ+6jz+EdDxukgxOpJBQ4ujnjMc42ooFt3KzzHt66+ocP3m66bOs+VDRxy0t5gHN2FCJ9Ro8T+xbrDxasQ==</DQ><InverseQ>ARHpcG6tE0F+lmUthtep1U8OrF+AQvqDhBq8MYK+/pF/LRZkFHkqTsj89OyWDlSH3LeYkOWsr9mAFxsvHZ9BSA==</InverseQ><D>G0OMs5kaF3LuJN9bU+/ENXab908dHG4OXJwRG2ie5muhzLNXhU+IQu7sd9DtTBNQKFHIIpWl9fwp/iw1v90cMUQGj0zhSXHAz7Vak/ryQLTyeIIciL8MQWvnbAaNlIoFq2wBl7SYs3n71B4MlvvTysaG0krsjiPh5LVgnBvzjGE=</D></RSAKeyValue>请按任意键继续. . .*//************************************************************************/}public static void PrivateKeyDecFun1(){RSACryptoServiceProvider rsaProvider = DecodeRSAPrivateKey(null);String PrivateKey = rsaProvider.ToXmlString(true);//将RSA算法的私钥导出到字符串PrivateKey中,参数为true表示导出私钥Console.WriteLine(PrivateKey);}static void Main(string[] args){PrivateKeyDecFun();PrivateKeyDecFun1();return;}}
}

【加密与解密】C#如何读取pem的KEY文件相关推荐

  1. SSL用pem和key文件生成jks文件

    转自:https://blog.csdn.net/long19901216/article/details/79696796 在工作中时长会遇到配置https,我使用的是Tomcat服务器,tomca ...

  2. pem crt key文件区别

    配置HTTPS证书时,会要求配置证书和私钥. 比如Nginx server {listen 443 ssl http2 default_server;listen [::]:443 ssl http2 ...

  3. 【RSA】RSA加密、解密、签名与验证

    前言 最近要做iOS SDK的联网授权,涉及到数据安全验证,因此想到使用RSA进行签名和验证. 授权主要流程如下: 1.客户方前往我方开放平台注册授权,得到AppId和AppSecret. 2.客户方 ...

  4. 非对称加密 公钥解密_了解非对称公钥加密

    非对称加密 公钥解密 Asymmetric cryptography, also called public key cryptography, is an essential element of ...

  5. Spring Cloud Config 加密和解密

    重要 先决条件:要使用加密和解密功能,您需要在JVM中安装全面的JCE(默认情况下不存在).您可以从Oracle下载"Java加密扩展(JCE)无限强度管理策略文件",并按照安装说 ...

  6. 安卓逆向_25 --- 密码学 之 《Java加密与解密的艺术》

    <Java加密与解密的艺术>中文 PDF版 :https://www.jb51.net/books/65048.html 1. 密码学应用 :https://www.bilibili.co ...

  7. ffmpeg读取加密的m3u8文件时无法访问.key文件

    用ffmpeg打开用AES加密的m3u8文件时,遇到下图问题 百度了一下,好像是说新版本出于安全限制了文件扩展名,只有白名单里的才能被读取,而.key文件不在白名单里.按照错误信息,想搜一下如何&qu ...

  8. MySql字段内容加密与解密

    AES和DES 对于存储在数据库中的敏感信息,往往需要对其进行加密.MySql提供了多种加密方式,其中两种为AES和DES. 这两种方式用法类似.性能上,AES各方面都略强于DES.因此推荐使用AES ...

  9. Java各种加密和解密方式

    加密算法 文章1:https://www.cnblogs.com/xibushijie/p/12851771.html 文章2:https://blog.csdn.net/weixin_3706959 ...

最新文章

  1. spring获取上下文的方式
  2. (六)可信计算知识点
  3. LoadRunner 8.1 学习笔记4
  4. 休眠 关闭串口输出_C#实例:串口通讯
  5. linux ljie mysql_[Linux Mysql] Linux下Mysql的基本操作
  6. js(Dom+Bom)第七天(2)
  7. Spring MVC防御CSRF、XSS和SQL注入攻击
  8. CyclicBarrier底层实现和原理
  9. python写二进制大文件,如何将文件写入二进制文件,或在大文件中编辑单行– Python...
  10. 图像处理基本概念、术语
  11. 51cto,一个创造能让IT人员成长的论坛
  12. 南方cass快捷键命令修改在哪_南方测绘cass快捷键命令大全,南方测绘cass常用的快捷键命令有哪些?...
  13. reviewboard mysql_搭建 Review Board - SVN 审核工具
  14. 百度搜索引擎都有哪些算法
  15. 2022内蒙古最新建筑施工塔式起重机(建筑特种作业)模拟考试题库及答案
  16. 手机连接电脑不读手机的终极解决方案
  17. 找不到实时聊天软件?给你推荐电商企业都在用的!
  18. 证书类型、自签CA证书、https双向认证(一篇就懂系列)
  19. DHCP服务配置-Cisco模拟器
  20. 2021年中国国产剧播出现状及行业发展趋势分析:网络剧播映指数上升明显,未来小体量精品短剧将会越来越多[图]

热门文章

  1. 配置有误:由于权限不足而无法读取配置文件
  2. 【分享】一个查看无线网络密钥的小方法(查看 wife密码,热点密码)
  3. Camera Hal OEM模块 ---- cmr_grab.c
  4. 2022 IDEA全家桶使用最新主题(免申请)
  5. Ocata Neutron代码分析(六)——APIRouter的初始化(3)顶级resource的map过程
  6. python 实现图片转卡通图
  7. 请问怎么用python画一个轮廓图,,例如中国地图这种,注意是轮廓图,求大佬指点
  8. 四叉树lod结合灯塔AOI
  9. 除了苹果耳机外哪个无线耳机好?苹果蓝牙耳机平替推荐
  10. 【最优化算法】基于【MATLAB】的拟牛顿法【Quasi Newton method】分析与推导