1. First step using OpenSSL to convert Pem key to der key//e:\01doc\bin>openssl.exe rsa-in rsakeydec.pem-outform der-out pri.der
2, call the following program directly read der converted to C # required XML key, and then ciphertext decryption
3. OpenSSL
http://download.csdn.net/download/jiayanhui2877/4089521
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.IO;usingSystem.Security.Cryptography;usingSystem.ComponentModel;usingSystem.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) {byteBT =0;byteLowbyte =0x00;byteHighbyte =0x00;intCount =0; BT = Binr. ReadByte ();if(BT! =0x02)//expect integer return 0; BT = Binr. ReadByte ();if(BT = =0x81) Count = Binr. ReadByte ();//Data size in next byte Else if(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 byte returnCount }//e:\01doc\010 Technical Document \openssl-1.0.2a\openssl_srcandlib\win32lib\bin>openssl.exe R //sa-in rsakeydec.txt-outform der-out pri.der //writing RSA Key Public StaticRSACryptoServiceProviderDecodersaprivatekey(stringPrikey) {//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); stringPath =@ "D:\\project\\consoleapplication1\\li_pri.der"; FileStream fs =NewFileStream (path, filemode.open,fileaccess.read); BinaryReader Binr =NewBinaryReader (FS);//wrap Memory Stream with BinaryReader for easy reading byteBT =0;ushortTwobytes =0;intElems =0;Try{twobytes = Binr. ReadUInt16 ();if(Twobytes = =0x8130)//data read as little endian order (actual data order for Sequence)Binr. ReadByte ();//advance 1 byte Else if(Twobytes = =0x8230) Binr. ReadInt16 ();//advance 2 bytes Else return NULL; Twobytes = Binr. ReadUInt16 ();if(Twobytes! =0x0102)//version Number return NULL; BT = Binr. ReadByte ();if(BT! =0x00)return NULL;//------All private key is an 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 =NewRSACryptoServiceProvider (); RSAParameters Rsaparams =NewRSAParameters (); 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);returnRSA; }Catch(Exception e) {Console.WriteLine (e.message + e.stacktrace);return NULL; }finally{Binr. Close (); } }/************************************************************************/ / * Your is PEM key, need to convert to C # RSA provider recognized key. First, take out the useless characters in the head and tail, and then use the following method to convert: * / /************************************************************************/ Public Static void Privatekeydecfun() {stringPrikey =@ "-----BEGIN RSA PRIVATE KEY-----MIICWWIBAAKBGQCF1A4LQYIPBQEUCZ9KKSFASQZKEFCBMGSM21SAKB5BO0SY07GD Cprojhf2xnqrv0cm7+lie3pbufsarui2wahzhaibplbl9z4fsfon5hsg6segbb17 Svke3zn/75goesqiqtyw4gujgzrbovvz+te Tnn+nhhbquqbkhnigpfvapqidaqab Aogag0oms5kaf3lujn9bu+/enxab908dhg4oxjwrg2ie5muhzlnxhu+iqu7sd9dt Tbnqkfhiipwl9fwp/iw1v90cmuqgj0zhsxhaz7vak/ryqltyeiicil8mqwvnbaan LIOFQ2WBL7SYS3N71B4MLVVTYSAG0KRSJIPH5LV Gnbvzjgecqqdcawe4xnf7shwo NFLJRG29SOKNIUHYKTDGCV9FVAM9U50EK882WVFMSJP+TK+1CXJMRSNLOI40BXKC u ABA1JOTAKEAUFQ9FMZHFBFF3E6N57WLIAJ5C1MEYHATT6QDAF49OZJBGZH1PEPN Jdgnezfvy7u5bmp7/updislcfues5ekb2qjaf84qime /ozqedz7si/e9labllerb Taz17nlh4geqg6hwhfwt3vv6ykskbrplle5nbpqwelxx0wsposvcipflrqjapaff NQ+6j Z+eddxukgxopjbq4ujnjmc42ooft3kzzht66+ocp3m66bos+vdrxy0t5ghn 2fcj9ro8t+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);//The private key of the RSA algorithm is exported to the string Privatekey, and the parameter is true to export the private keyConsole.WriteLine (Privatekey);/************************************************************************/ /* The results of the program run as follows: * <rsakeyvalue><modulus>n9wuc0moqqanlamfzcrh2rem5bbqgzhrdntumpg+qttlgnoxg3ka6crxds Tuk1dhdo/pyhn6qvbbgq7otlmh2yqim6s25fc+bun6deyuoorbigwde0rynt2tf++rqbleiklwfuifcy M6waL1Wfk3k5z fjrxwalkgsotsidxvwqu=</modulus><exponent>aqab</exponent><p>3amhuf5x E0h1jp35Y6xtvbK cjyliwcrqxnffx72pvbudbjppnslxzrct/rzptql4zeujztoung8sgrmgwtstrq== </p><q>ufq9fmzhfbff3e6n57wlia J5c1meyhatt6qdaf49ozjbgzh1pepnjdgnezfvy7u5bmp7/updi Slcfues5ekb2q==</q><dp>f84qime/ozqedz7si/e9 LABLLERBTAZ17NLH4GEQG6HWHFWT3VV6YKSKB Rplle5nbpqwelxx0wsposvcipflrq==</dp><dq>paffnq+6jz+eddxuk Gxopjbq4ujnjmc42ooft3kz zht66+ocp3m66bos+vdrxy0t5ghn2fcj9ro8t+xbrdxasq==</dq><inverseq>arhpcg6t E0f+lmuth Tep1u8orf+aqvqdhbq8myk+/pf/lrzkfhkqtsj89oywdlsh3leykowsr9mafxsvhz9bsa==</inverse Q><d>g0oms5kaF3LUJN9BU+/ENXAB908DHG4OXJWRG2IE5MUHZLNXHU+IQU7SD9DTTBNQKFHIIPWL9FW P/iw1v90cmuqgj0zhsxhaz7vak/ryqltyeiicil 8MQWVNBAANLIOFQ2WBL7SYS3N71B4MLVVTYSAG0KR sjiph5lvgnbvzjge=</d></rsakeyvalue> Please press any key to continue ... */ /************************************************************************/} Public Static void PrivateKeyDecFun1() {RSACryptoServiceProvider Rsaprovider = Decodersaprivatekey (NULL); String Privatekey = rsaprovider.toxmlstring (true);//The private key of the RSA algorithm is exported to the string Privatekey, and the parameter is true to export the private keyConsole.WriteLine (Privatekey); }Static voidMain (string[] args) {privatekeydecfun (); PrivateKeyDecFun1 ();return; } }}
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
"Encrypt and Decrypt" C # How to read a PEM key file