NetCore 生成RSA公私钥对,公钥加密私钥解密,私钥加密公钥解密

傷城~ 2022-05-30 07:08 844阅读 0赞

NetCore 生成RSA公私钥对,公钥加密私钥解密,私钥加密公钥解密

  1. using Newtonsoft.Json;
  2. using Org.BouncyCastle.Crypto;
  3. using Org.BouncyCastle.Crypto.Encodings;
  4. using Org.BouncyCastle.Crypto.Engines;
  5. using Org.BouncyCastle.Crypto.Generators;
  6. using Org.BouncyCastle.OpenSsl;
  7. using Org.BouncyCastle.Pkcs;
  8. using Org.BouncyCastle.Security;
  9. using Org.BouncyCastle.X509;
  10. using System;
  11. using System.IO;
  12. using System.Text;
  13. namespace ConsoleAppTest
  14. {
  15. class Program
  16. {
  17. //自己生成
  18. static string _publicKeyString = @"-----BEGIN PUBLIC KEY-----
  19. MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmu5B+WIU9ZK+uy11qmdj
  20. KygwcH6r8YOui2jc87pWShKAEnEE2Q81twgQ4KGFylodpNsXs+EGeQA8HUiDKK11
  21. Pm6AMzrqHQ8rtNNWbQA6Ca+BJJHEoyrizaHTGLWU7oHe9TcRQ8Iq5vihF74x1jD2
  22. BHXpgR6KUhx9DUMFgdwpLXhZ2EgG85eOuajcHl+tLN52bEpGwSHyL5iWuX2U5qfN
  23. Ln3h/lCmdktPwCjVVyaoLALxP0oDtalRwLKRJuD91p6YxrAeN3eRkGWoYXH5bSrS
  24. BR+5id5yBplxayVrozJXFpOFySTrCHD2snnfjmn39dKsRjwRjKG/zKUPO54GPovv
  25. rODK32c1xiKpQQ7XAzyXPNij3MWPJFu6z24eNdILm4wF1jFWQlrsca0znpjoAVFY
  26. e1yp1lXAtYlxgNURMQ2RwvBtnT3BUhUP382GYd0XPdV1xodOaJVf8ce3YImrGaAY
  27. jPjbTPTbTyzwcHyc1LHwYw4W7aYiTyX8p5+7PkdkRr8uiKA9iFhH6iq+7MPv5O0F
  28. NGSktGZkyFSKg9vazQmESlUC+blC2yQRBJsqV84weMKGCURg3jxetTfENHJ8N+H9
  29. pnacvRjl5O5cZjECOi4XrGAUd4bvqKBfZ1OnB1htWGEjPyGhKzmAG8vzf0GVtAK8
  30. 8qhuYM7FceTYJsqUnzFnEHUCAwEAAQ==
  31. -----END PUBLIC KEY-----";
  32. static string _privateKeyString = @"-----BEGIN RSA PRIVATE KEY-----
  33. MIIJKAIBAAKCAgEAmu5B+WIU9ZK+uy11qmdjKygwcH6r8YOui2jc87pWShKAEnEE
  34. 2Q81twgQ4KGFylodpNsXs+EGeQA8HUiDKK11Pm6AMzrqHQ8rtNNWbQA6Ca+BJJHE
  35. oyrizaHTGLWU7oHe9TcRQ8Iq5vihF74x1jD2BHXpgR6KUhx9DUMFgdwpLXhZ2EgG
  36. 85eOuajcHl+tLN52bEpGwSHyL5iWuX2U5qfNLn3h/lCmdktPwCjVVyaoLALxP0oD
  37. talRwLKRJuD91p6YxrAeN3eRkGWoYXH5bSrSBR+5id5yBplxayVrozJXFpOFySTr
  38. CHD2snnfjmn39dKsRjwRjKG/zKUPO54GPovvrODK32c1xiKpQQ7XAzyXPNij3MWP
  39. JFu6z24eNdILm4wF1jFWQlrsca0znpjoAVFYe1yp1lXAtYlxgNURMQ2RwvBtnT3B
  40. UhUP382GYd0XPdV1xodOaJVf8ce3YImrGaAYjPjbTPTbTyzwcHyc1LHwYw4W7aYi
  41. TyX8p5+7PkdkRr8uiKA9iFhH6iq+7MPv5O0FNGSktGZkyFSKg9vazQmESlUC+blC
  42. 2yQRBJsqV84weMKGCURg3jxetTfENHJ8N+H9pnacvRjl5O5cZjECOi4XrGAUd4bv
  43. qKBfZ1OnB1htWGEjPyGhKzmAG8vzf0GVtAK88qhuYM7FceTYJsqUnzFnEHUCAwEA
  44. AQKCAgAJNMGmVjHtIrZjLHEaulB9+sIgGSLR89NuFMHWWLryZVWHYwBY/oqgUOIh
  45. 2u82hjLPPjaTGXq3O3CXA91JUD9QgaPsB2LsbZ+Y+9rdmL8aHrvjhqbi1DRMaEKB
  46. LB8Iqh5rv0UvG81NUrZN0R8ofVnNC42fvscU2H0Eyff8jq7CtS1PiP4iwN16AkLs
  47. Kh7B9Qkf56z7Im9/7Qb9yCzOJOfwDIpegH/XtSNsxXBh4JnrHZSkwFrmk0RYmTO/
  48. Vey3cU6eNc5h2ODFLgk6mxlpZ3s50zgE7Xskkb8X0Q4rkRz0KjlvqZousvmxwsSq
  49. M3lIuedDOCQJ0X2yZRd54Sq5UjrgWKWc7LT9qeiUYmdx3LM6LbG+DzGLHgQ7SkpT
  50. ZmOKmXOWtjQ/4LOF1vDS3vK7aGU6QjebswKCZv/b9hDiA2AWtoVM3rOlPc1ypif+
  51. Uoq1PLxnjxIfptdwlZf9n9ol6+5K2E2PeV9d3nJ+idmoi7EnGNUB/kgud3Rv5uZ7
  52. Ftf/cqHgUiwYuMR/n40xR4tx6w8SSIL31c83OZQbOsh/7fN89FWxqYeDzAir4Yj7
  53. ozAUteyAnBn70BO0SzsNnt6jGwDcnyQuQtAnnoNgbEVzD6AOaTvmuKsx/RvDp+nv
  54. OoeGVRSZusJYL/DexH8Rp2js+ai3wI7hnf4YBgG/jQTf3L9egQKCAQEA7Vu1mWOp
  55. Nq96dCSIRBbu/3OhBhFDKuatxB1ZKoccADCaz4NqaWCUZr2PutSgDqc8qqIldnwr
  56. 0Cxojj658MJmMehECOsDiEBRlCsZX3ghstVzdbnuhGEsC4RBaaIY9Ik0Jj0b40Fa
  57. GDEAULk0cOucA3bPhyPiaGuo9dHQbREIGKqmGMxgSSm6CeuQcon253U5jNfrY3se
  58. LlLcBYKAAJMLW9c8niTZPXZA62nyGVH4aaLiyB+NodRgSO/zNwR2vMTxdJbCBQJ7
  59. YJhiuGqYGSLnIf7MUBg5X0jL0oShNGngcCtLSwXwP3I0+AnMaKQo+93+gILy4J2Q
  60. yzkK0guR7E6x9QKCAQEApxlFn3smcad8SeI0fXd8nBLhk4GbNXCy+fMTy11zXmVJ
  61. M2HeE6u+nGLoaMrdL0IFyVOTDV6Cn5k1iPLFMTcGdLqrS+j/ICZh0+F0qg7x1inp
  62. O3Fsgp4C0eebcigk9//GCkFAvDfgfAPB3G6R6qA+xIq7P6M/D2Iy4wNQaeyK+ubC
  63. AIUydF9sdLgn/cwwBbo6E9GPr6LHy1AbNvK8/WkogKnXONocjejiE6Y45RcK7Ci/
  64. iG1MlvTeXMT7A0ccKrJDxipfhpLfENS7TClvOoi6T5mGj4tAGaU1YqBC6FLB8Fk1
  65. NR3BsByc/xShzmdelRlE5ZkD76dkt58KK9Dcpg9UgQKCAQBWFOSPdK1xv8JRTM5+
  66. ozKaQn0rjicl7/MlJN+ppMZq6zW5/JcjEHvBpw3xXBuQNOazm4qqpe3d2b0xmV4m
  67. Ctq1Tt8dvN3TFECB0/+nuBHAodj14TC3oeYvZw+yF6+lP/1BwPfUO2dJTrwmioSS
  68. T2CNgRFSmZkK9cCZJjbI11xwVbNXWwewgQmPf3crkw2Qc9sjUUt1ELmpYzOYa/Ow
  69. QaPk8vJxCDwhJjn1Jr8+n5PP+9rzaT4casFgsmUqltvZKjPHbMWAu52zMpDbAQ2Y
  70. UCgzFA1VHvPvsp75AlDUiXF0PL9ZvhWbbPf43NTdPmv+rEwYn2UmQP66NT3PX5LU
  71. eNXhAoIBAQCfb9miphq0bx6EULXM0WmwccOSvyOdBf9/xpOog25FL1d9E3CWTFT/
  72. WtBuzMHnCZQD2R6Crx7rsYAHP70vjFU4o7Q2JgboYjcNuB1c9g2CT1MfSMZEiwgd
  73. yGPltLAxgXcw6boe3SHwspUTAt1vhZ7eYZDw046j2wq62Lqtlum1JOEPJghSSYpu
  74. hBiEbYOUs3Ae4OG8sBD6yWBuOYZiNShUO7oDoPmF3iN4pC29SRM+6lJ2lfNyRgq1
  75. ca4gHoWdp6JLPrsO6Ky2noRn01EyBKvgr5hY9oEe9yfNByVQD0bFUhkWqWHZ7DNQ
  76. oBsTmkYA9a9rc2jyDkJngfRugkdGm3IBAoIBAHrY2yYT59hFXq99HvH2MB5QcMlv
  77. TtOqjs1tmE3Mpivyg9YNvDeDTv1qOZn8xUd959nJrHSqN8me86P12DTQPCzdhIRT
  78. MM/bNjr6/bHhKG3nF/Xkln4hK5YtSH1PjCml+VEoUPFwgsWvn2dhYwsQ1wiarwkL
  79. FzIijlLmfuLGvS8kTPMRXert4UWZcXRD8B/MypYt3uMjLbeXIAHuOG9wjuuV/Yla
  80. XJBgOImw0Jhib7NqS0BKv3SvhHA7olduqOv9z0yGHXcHZKxB6O7+YKATc1nszjwc
  81. cAEm30c3/mhCHPuathM0laKV36Z4hp2y8ginJdK7gZQSkyzjRDI2yx5cq6U=
  82. -----END RSA PRIVATE KEY-----";
  83. //网站生成
  84. static string _publicKeyStringWeb = @"-----BEGIN PUBLIC KEY-----
  85. MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCPNZe67AfIs2rFWLp5HZ6y8VG/
  86. ybhhE0Q9WmkdnPXFGSN9j3M8Uglmh78MCfawm9goHnvMl5c8ta2dDnKZi+WWuZ6D
  87. K+OOS/kBgR9cLMci+9bI7NA8/spxbVBbKDlgyRWPle65Nm7foX3OamNJe6uoMaLL
  88. Y/jWSdwxPsp1jp8GJwIDAQAB
  89. -----END PUBLIC KEY-----";
  90. static string _privateKeyStringWeb = @"-----BEGIN RSA PRIVATE KEY-----
  91. Proc-Type: 4,ENCRYPTED
  92. DEK-Info: DES-EDE3-CBC,EF30E5A772A723B5
  93. 8DS2obJNGC9M2GJuxID6mZV5p4k+oxgv1fEILJ+CwpzJ0lAGspDiqLgxSKmETZiE
  94. ct9zCkEEABTarhBspC1i4O4np4nO+z40iTvDwu88bDMvWvEV2EYYaJn9ZelJZ51y
  95. KHEJw4fncvZN8ULNBZ7Fnn9Y6+pLW6IJrSHTL7TrN1gi257LAX5xUgHvNqet4XMl
  96. UKoX0DmDZkCFdnn3a/DQUA4au8rrotsU/ihBDFMMGljA/QKPApnuy07+KyXtaDx6
  97. YlBMifqbsuYLOvNMT9aqbAPp5OFdykTnfPRPnx9xHuTqXE8NfInYvSMkcC8lpUrt
  98. M8wsCVaRukliBOSyNYxyqMZwBJMXrY9+lyZMi6/g6450HJ0NBOC8/mc5Gj8nD6L6
  99. tjkkFyS/t4aU7lZWqh4oMRHPwDQqrgSZB13lBveXVSoTpVOzvgV2vEC6p9s+IGIC
  100. +WpNRq55zWtj8EsZly/p91NlrHujDQsEyrkUDUE3xjon66vQow9jRwYngA0VWeL8
  101. dO9XN/srJ4jQB4I/wx9X7MfDJzVF/RrHT42QVfeqsPx071TJAd3+GqJS0+B1FaS8
  102. PoTCY4yor2ViTOS/NfZEs0SyC1U9t41FTIEnfnZVqEF54Hy3l8kCrTjVc2Vm2HAG
  103. /DAzGgbdOV8KJKdWFpc5+aQde5j2xxd4LwF8kKTSLaRonVMhBJ4LBLPn9NsdU7vw
  104. MyFyLnHb4qsilAC3P2Ui8MJP2kJsqO1ho3V9ITG8IzxiZmpLLL1D8GAJoaDtDxhu
  105. MtQZQpgpuW7CaVItZrxrmBbdMXpGW/GkOhySZVI0au04GfPHQtssAQ==
  106. -----END RSA PRIVATE KEY-----";
  107. static string _encryptedWithPublicStr = @"N+sAvcN+AveMeY1oehXHNMj4PAlLhNRSXgUrcTXLlOlezFyM2UwvSEXNchVs0r5aMYgn2gAX1ofOkXGzywvoaju2qDjcdZIV4WYlhR6RI0PEueootTRnQoJCNKnOaCQ2YZsXys5crm6xRMsFM7QcKKxjUWeg41Q8u5pjZOM3PtdoF+AZwweieNEJrWSsvGAKXfDol9R5fCJ2s51G5/6q+3U9wR8kWcZl7cpmdSJUWg2GSHcKVda6cJ2Ojr44wDLfiBTUz72dzDlZHJowHQc3s8+GYx6rIYQyghxYdiHfDPtQdOtPxdKaJajk+bJOyuEicYuW0j7CwV/+zD7XPoDkoNMbp6oikCBmU1d+zmWsfg4lySwPe++2irjJmCLaOeRHzvXdkfnUhWCzjfxPGSEE+feSMEvDbTAvXbhvtC7zguJBpy2eyQM+n0wtkXrsYOxBldVOT3M1CAKHEdBecoV7xxLPlrpnxpgf2jsWMdfRwXYVpaXacVQuAwe8MLCexlLEPusAAFMnp3DpBO4gbCQCRoAKJTN7MyJfKmeOLAKHR6M+NuO5+AZ2Z2sj06u9SNcYuKm5Jgl3NIDzTrVfNbFjaDqFLzWpHiv1JS20D21gUocycDAVLw09U3aAz5KzBpbPQ2knqslgnBi1116xKzCOEhqB6mMNuoVPrDUr2eIFuns=";
  108. static string _encryptedWithPrivateStr = @"dkOvosyTPPOrAglholTHEqu/RoyQv1Ih7qy/SsuxjoO92ZpL4alNhso6snPyooZmOBP/ljb91BEXaaqqaLneYzvlvEAqJPKXyOvYFREhcwLXCE9dIbn0NPs7srRETd0JqeQFyRv6qGvoA2aXg4Fxch7cANqpKY03eb3htuqTTranAZsPT3SYZPKOxK4wgfU/63wDBCWEO0SeNga86QgLpfcQ0DRukqNVr64lDt2QddUqeKxbnAJM2u2xpwnGayFDKP03BjV6rXnId7NlkgkoqZw3SpyOg5HOe/4tTbRQ4gjH6N5Q4VnyFGehOw3SH/KNWT/KaE2anI9vWCZHy0ia8mxiBKH0vuJl3WEoR1JPFmhSrbcemrWpgc0a8r6CJQRMefYw18z3AuHRu3vAOPEtS9bXaySpQ0PLjS/pxG3Y1MTZLQPBvCcY77Ghr35UNJ2Z8XIbiwt9dqs0Az7y6ARj2qyz+96ZQkstrDJw4OikZj0w6olHoL9WQ2b04S7wz6GE87/5AS3hphZJNwFpvHxaUWTRYf+N2r9GrjM3nplYqBAQwz1XI65qhQL4PBK7/4HTgkVBDNRsJNHOJp5Uq4+UtZYwgwLOjxhBG5dlLJMCbZvABqE8e4gRLDv8wfBiC8qS4CxhOz3HuxW+KdZFkEG9Qajf/hxEzwUoxf+mLagdp1U=";
  109. static string _encryptedWithPublicWebStr = @"KRC9OJ3R981IsvBJ33Z9eDJHgg5+EOcnh95yZA1HDPeOnn7+s7n7TH4yyIOVAS677bESftzcNfhyCCrDVb7GkRBTu3UgMlkl/KlkC4a8yS2skks5TwYkjPmr2I31PCZzg9JuH0eo3S4oXzqg9NVhgW37kUgRjjbH489XFYeUQEM=";
  110. static string _encryptedWithPrivateWebStr = @"i8lGOft4QH781r5+GUuzp3zEjmmpyw3N7qjj6wKH6LRjxzzCwxJqyewztmosrO9aJt/0LEew5wMSt/xWjrHNiaiAdxnI0UX7i7TZWNASXe1Sie/+36egYfu5x4BctIh2NPP3c6HixVJzQ2I5vtuKK2UPEw8yu5kH3p7+Ifp7CbU=";
  111. static void Main(string[] args)
  112. {
  113. Console.WriteLine("Hello World!");
  114. //var jsonStr = JsonConvert.SerializeObject(new Test { Name = "塞尔达荒野之息" });
  115. //var jsonByte = Convert.ToByte(jsonStr);
  116. //Console.WriteLine(jsonStr);
  117. //GenRSAKeyPair("xjl");
  118. //RsaEncryptWithPublic("yahaha");
  119. //RsaEncryptWithPrivate("link");
  120. string encryptedTxt = RsaEncryptWithPublic(new Test { Name = "喷射战士2haha" });
  121. //RsaDecryptWithPrivate(_encryptedWithPublicStr);
  122. RsaDecryptWithPrivate(encryptedTxt);
  123. //RsaEncryptWithPrivate(new Test { Name = "odessey" });
  124. //RsaDecryptWithPublic(_encryptedWithPrivateStr);
  125. Console.ReadLine();
  126. }
  127. public static void GenRSAKeyPair(string name)
  128. {
  129. var generator = new RsaKeyPairGenerator();
  130. var seed = Encoding.UTF8.GetBytes(name);
  131. var secureRandom = new SecureRandom();
  132. secureRandom.SetSeed(seed);
  133. generator.Init(new KeyGenerationParameters(secureRandom, 4096));
  134. var pair = generator.GenerateKeyPair();
  135. //第一种方案
  136. //var privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(pair.Private);
  137. //var serializedPrivateBytes = privateKeyInfo.ToAsn1Object().GetDerEncoded();
  138. //var serializedPrivate = Convert.ToBase64String(serializedPrivateBytes);
  139. //Console.WriteLine("Private Key:" + serializedPrivate);
  140. //var publickKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pair.Public);
  141. //var serializedPublicBytes = publickKeyInfo.ToAsn1Object().GetDerEncoded();
  142. //var serializedPublic = Convert.ToBase64String(serializedPublicBytes);
  143. //Console.WriteLine("Public Key:" + serializedPublic);
  144. //第二种方案
  145. var twPrivate = new StringWriter();
  146. PemWriter pwPrivate = new PemWriter(twPrivate);
  147. pwPrivate.WriteObject(pair.Private);
  148. pwPrivate.Writer.Flush();
  149. var privateKey = twPrivate.ToString();
  150. Console.WriteLine("Private Key:" + privateKey);
  151. var twPublic = new StringWriter();
  152. PemWriter pwPublic = new PemWriter(twPublic);
  153. pwPublic.WriteObject(pair.Public);
  154. pwPublic.Writer.Flush();
  155. var publicKey = twPublic.ToString();
  156. Console.WriteLine("Public Key:" + publicKey);
  157. }
  158. /// <summary>
  159. /// 公钥加密
  160. /// </summary>
  161. /// <param name="dataToEncrypt">待加密文本</param>
  162. //public static void RsaEncryptWithPublic(string dataToEncrypt)
  163. public static string RsaEncryptWithPublic(Test dataToEncrypt)
  164. {
  165. var bytesToEncrypt = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(dataToEncrypt));
  166. var encryptEngine = new Pkcs1Encoding(new RsaEngine());
  167. using (var txtReader = new StringReader(_publicKeyString))
  168. {
  169. var keyParameter = (AsymmetricKeyParameter)new PemReader(txtReader).ReadObject();
  170. encryptEngine.Init(true, keyParameter);
  171. }
  172. var encryptedText = Convert.ToBase64String(encryptEngine.ProcessBlock(bytesToEncrypt, 0, bytesToEncrypt.Length));
  173. // 获取publickKey对应的keyParameter的第一种方法
  174. //var stringReader = new StringReader(_publicKeyString);
  175. //var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(stringReader);
  176. //var keyParameter = (AsymmetricKeyParameter)pemReader.ReadObject();
  177. // 获取publickKey对应的keyparameter的第二种方法
  178. //var publicKey = Convert.FromBase64String(_publicKeyString);
  179. //var keyParameter = PublicKeyFactory.CreateKey(publicKey);
  180. //用公钥加密的第一种方法
  181. //var engine = new RsaEngine();
  182. //engine.Init(true, keyParamter);
  183. //var blockSize = engine.GetInputBlockSize();
  184. //return engine.ProcessBlock(data, 0, blockSize);
  185. //用公钥加密的第二种方法
  186. //IBufferedCipher cipher = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding");
  187. //cipher.Init(true, keyParameter);
  188. //var encryptedText = Convert.ToBase64String(cipher.DoFinal(bytesToEncrypt));
  189. Console.WriteLine("利用公钥加密后的数据:" + encryptedText);
  190. return encryptedText;
  191. }
  192. /// <summary>
  193. /// 私钥加密
  194. /// </summary>
  195. /// <param name="dataToEncrypt">待加密文本</param>
  196. //public static void RsaEncryptWithPrivate(string dataToEncrypt)
  197. public static void RsaEncryptWithPrivate(Test dataToEncrypt)
  198. {
  199. var bytesToEncrypt = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(dataToEncrypt));
  200. var encryptEngine = new Pkcs1Encoding(new RsaEngine());
  201. using (var txtReader = new StringReader(_privateKeyString))
  202. {
  203. var keyPair = (AsymmetricCipherKeyPair)new PemReader(txtReader,new PasswordFinder("xjl")).ReadObject();
  204. encryptEngine.Init(true, keyPair.Private);
  205. }
  206. var encryptedText = Convert.ToBase64String(encryptEngine.ProcessBlock(bytesToEncrypt, 0, bytesToEncrypt.Length));
  207. Console.WriteLine("利用私钥加密后的数据:" + encryptedText);
  208. }
  209. public class Test
  210. {
  211. public string Name { get; set; }
  212. }
  213. /// <summary>
  214. /// 私钥解密
  215. /// </summary>
  216. /// <param name="dataToDecrypt">待解密的数据</param>
  217. public static void RsaDecryptWithPrivate(string dataToDecrypt)
  218. {
  219. var bytesToDecrypt = Convert.FromBase64String(dataToDecrypt);
  220. // 获取privatekey对应的keyparameter的第一种方法
  221. var stringReader = new StringReader(_privateKeyString);
  222. //var pemReader = new Org.BouncyCastle.Utilities.IO.Pem.PemReader(stringReader);
  223. var pemReader = new PemReader(stringReader, new PasswordFinder("xjl"));
  224. var keyPair = (AsymmetricCipherKeyPair)pemReader.ReadObject();
  225. var keyParameter = keyPair.Private;
  226. // 获取privatekey对应的keyparameter的第二种方法
  227. //var publicKey = Convert.FromBase64String(_publicKeyString);
  228. //var keyParameter = PublicKeyFactory.CreateKey(publicKey);
  229. // 用私钥解密的第一种方法
  230. //var engine = new RsaEngine();
  231. //engine.Init(false, keyParameter);
  232. //var blockSize = engine.GetInputBlockSize();
  233. //engine.ProcessBlock(dataToDecrypt, 0, blockSize);
  234. // 用私钥解密的第二种方法
  235. IBufferedCipher cipher = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding");
  236. cipher.Init(false, keyParameter);
  237. var decipheredBytes = cipher.DoFinal(bytesToDecrypt);
  238. var decipheredText = Encoding.UTF8.GetString(decipheredBytes);
  239. Console.WriteLine("用私钥解密后的数据:" + decipheredText);
  240. }
  241. /// <summary>
  242. /// 公钥解密
  243. /// </summary>
  244. /// <param name="dataToDecrypt">待解密的数据</param>
  245. public static void RsaDecryptWithPublic(string dataToDecrypt)
  246. {
  247. var bytesToDecrypt = Convert.FromBase64String(dataToDecrypt);
  248. // 获取privatekey对应的keyparameter的第一种方法
  249. var stringReader = new StringReader(_publicKeyString);
  250. //var pemReader = new Org.BouncyCastle.Utilities.IO.Pem.PemReader(stringReader);
  251. var pemReader = new PemReader(stringReader);
  252. var keyParameter = (AsymmetricKeyParameter)pemReader.ReadObject();
  253. // 获取privatekey对应的keyparameter的第二种方法
  254. //var publicKey = Convert.FromBase64String(_publicKeyString);
  255. //var keyParameter = PublicKeyFactory.CreateKey(publicKey);
  256. // 用私钥解密的第一种方法
  257. //var engine = new RsaEngine();
  258. //engine.Init(false, keyParameter);
  259. //var blockSize = engine.GetInputBlockSize();
  260. //engine.ProcessBlock(dataToDecrypt, 0, blockSize);
  261. // 用私钥解密的第二种方法
  262. IBufferedCipher cipher = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding");
  263. cipher.Init(false, keyParameter);
  264. var decipheredBytes = cipher.DoFinal(bytesToDecrypt);
  265. var decipheredText = Encoding.UTF8.GetString(decipheredBytes);
  266. Console.WriteLine("用公钥解密后的数据:" + decipheredText);
  267. }
  268. }
  269. }

发表评论

表情:
评论列表 (有 0 条评论,844人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java RSA加密解密

    RSA非对称加密原理此处不是重点,麻烦读者自行了解哦。如果了解了RSA,你就知道为什么要用公钥加密,私钥解密(不懂私聊哦),下面是RSA加解密例子,RSA加解密算法有好多种,这