因为C#的RSA加密解密只有公钥加密,私钥解密,没有私钥加密,公钥解密。在网上查了很久也没有很好的实现。BouncyCastle的文档少之又少。很多人可能会说,C#也是可以的,通过Biginteger开源类来实现,不过那个是有一个文章,不过他加密出来的是16进制结果的。根本不能和JAVA互通。连加密出来的都不和C#原生的加密出来的结果格式一样。所以还是没有好的解决方法。

接下来还是不断的找资料,找方法。找朋友找同事。个个都找。问题是有的,方法也是有的,所以总结各路大神之后写了这个类。实现了私钥加密,公钥解密。并通过在线的校验之后,发布上来。大家可以做一个DEMO,然后进去在线RSA加密解密校验。

在线RSA,DES等加密解密地址:

http://tool.chacuo.net/cryptrsapubkey

下面直接粘贴代码,不多说:

BouncyCastle相关DLL,估计不用我多说,大家可以百度下载。然后引用就可以了!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using Org.BouncyCastle.Asn1.Pkcs;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Math;
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.X509;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Crypto.Encodings;namespace CryptionUtils
{public class RSAForJava{public RSAForJava(){}/// <summary>/// KEY 结构体/// </summary>public struct RSAKEY{/// <summary>/// 公钥/// </summary>public string PublicKey{get;set;}/// <summary>/// 私钥/// </summary>public string PrivateKey{get;set;}}public RSAKEY GetKey(){//RSA密钥对的构造器  RsaKeyPairGenerator keyGenerator = new RsaKeyPairGenerator();//RSA密钥构造器的参数  RsaKeyGenerationParameters param = new RsaKeyGenerationParameters(Org.BouncyCastle.Math.BigInteger.ValueOf(3),new Org.BouncyCastle.Security.SecureRandom(),1024,   //密钥长度  25);//用参数初始化密钥构造器  keyGenerator.Init(param);//产生密钥对  AsymmetricCipherKeyPair keyPair = keyGenerator.GenerateKeyPair();//获取公钥和密钥  AsymmetricKeyParameter publicKey = keyPair.Public;AsymmetricKeyParameter privateKey = keyPair.Private;SubjectPublicKeyInfo subjectPublicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey);PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privateKey);Asn1Object asn1ObjectPublic = subjectPublicKeyInfo.ToAsn1Object();byte[] publicInfoByte = asn1ObjectPublic.GetEncoded("UTF-8");Asn1Object asn1ObjectPrivate = privateKeyInfo.ToAsn1Object();byte[] privateInfoByte = asn1ObjectPrivate.GetEncoded("UTF-8");  RSAKEY item = new RSAKEY(){PublicKey =Convert.ToBase64String(publicInfoByte),PrivateKey=Convert.ToBase64String(privateInfoByte)};return item;}private AsymmetricKeyParameter GetPublicKeyParameter(string s){s = s.Replace("\r", "").Replace("\n", "").Replace(" ","");byte[] publicInfoByte = Convert.FromBase64String(s);Asn1Object pubKeyObj = Asn1Object.FromByteArray(publicInfoByte);//这里也可以从流中读取,从本地导入   AsymmetricKeyParameter pubKey = PublicKeyFactory.CreateKey(publicInfoByte);return pubKey;}private AsymmetricKeyParameter GetPrivateKeyParameter(string s){s = s.Replace("\r", "").Replace("\n", "").Replace(" ", "");byte[] privateInfoByte = Convert.FromBase64String(s);// Asn1Object priKeyObj = Asn1Object.FromByteArray(privateInfoByte);//这里也可以从流中读取,从本地导入   // PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privateKey);AsymmetricKeyParameter priKey = PrivateKeyFactory.CreateKey(privateInfoByte);return priKey;}public string EncryptByPrivateKey(string s,string key){//非对称加密算法,加解密用  IAsymmetricBlockCipher engine = new Pkcs1Encoding(new RsaEngine());//加密  try{engine.Init(true, GetPrivateKeyParameter(key));byte[] byteData = System.Text.Encoding.UTF8.GetBytes(s);var ResultData = engine.ProcessBlock(byteData, 0, byteData.Length);return Convert.ToBase64String(ResultData);//Console.WriteLine("密文(base64编码):" + Convert.ToBase64String(testData) + Environment.NewLine);}catch (Exception ex){return ex.Message;}  }public string DecryptByPublicKey(string s,string key){s = s.Replace("\r", "").Replace("\n", "").Replace(" ", "");//非对称加密算法,加解密用  IAsymmetricBlockCipher engine = new Pkcs1Encoding( new RsaEngine());//解密  try{engine.Init(false, GetPublicKeyParameter(key));byte[] byteData = Convert.FromBase64String(s);var ResultData = engine.ProcessBlock(byteData, 0, byteData.Length);return System.Text.Encoding.UTF8.GetString(ResultData);}catch (Exception ex){return ex.Message;}  }}
}

C#使用BouncyCastle来实现私钥加密,公钥解密的方法相关推荐

  1. RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密

    RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...

  2. 分享一个RSA加解密工具类,公钥加密私钥解密、私钥加密公钥解密、私钥签名公钥验签、生成公钥私钥

    测试: public static void main(String[] args) {try {//生成公钥私钥Map<String, Object> map = RSAUtil.ini ...

  3. 公钥加密私钥解密私钥加密公钥解密

    公钥加密体制 1.公钥加密体制用于保密性时,就是公钥加密,私钥解密. 因为公钥是可以公开了, 那么任何人都可以使用公钥对信息进行加密,但是只有持有私钥的人才能正确解密.这样就保证了信息的保密性,因为只 ...

  4. C#实现RSA公钥加密私钥解密、私钥加密公钥解密以及Pcks12、X509证书加解密、签名验签

    RSA的私钥签名公钥验签可以见 http://blog.csdn.net/starfd/article/details/51917916,所以这里就没提供对应代码,具体代码如下: using Org. ...

  5. C#.NET Rsa私钥加密公钥解密

    在C#中,RSA私钥只能签名,不能加密,如果要加密,要借助BouncyCastle库. nuget 中引用 Portable.BouncyCastle. 工具类: RsaEncryptUtil usi ...

  6. 关于js私钥加密公钥解密的问题

    博客荒废很久了,最近遇到一个问题,看网上的说明比较少,所以写下来给大家一个参考 一般来说rsa算法都是使用公钥加密,私钥解密,或者私钥签名,公钥验签.但总有特别的时候会想要用私钥加密,公钥解密,但是j ...

  7. openssl公钥加密私钥解密和私钥加密公钥解密

    最近在弄音视频上云,参考了腾讯云中SecretId和SecretKey,直观理解SecretKey是私钥,用于签名,然后公钥验证签名,个人理解SecretId在腾讯云系统里面有一条记录,此记录存放着公 ...

  8. RSA双向加解密(公钥加密-私钥解密;私钥加密-公钥解密)

    非对称加密算法中,提供一个公钥一个私钥.一般情况下,采用公钥加密.私钥解密的方式. 假设有这样一个场景:服务A与服务B需要通信,通信内容为了安全需要进行加密传输,并且服务A与服务B不能互相持有对方的钥 ...

  9. RSA用私钥加密数据公钥解密数据(不是签名验证过程)

    RSA用私钥加密数据公钥解密数据,严格的来说,并不安全.但是最近在写一个keygen的时候,软件作者是这么用的,所以只能搞一个这样的. 常规自带的一些rsa密码utils里面并没有这种功能.只有封装好 ...

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

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

最新文章

  1. java截取图片-设置方位+设置大小
  2. 《构建之法》读后感之项目计划
  3. 如何成为一名卓越的前端工程师
  4. 关于css3的自定义字体
  5. mac下日期、时间戳互转
  6. ACM组队训练记录(Grooming)
  7. linux企业版5安装卡乱码,linux下安装mysql5.5 乱码问题
  8. 进击的AssetBundles和它的工具们
  9. codeforces-constructive algorithms(构造算法.)
  10. vs2012 安装 InstallShield
  11. 百度地图标记点加点击事件和鼠标移入事件并添加数据
  12. 分享一下自己收集到的真实用户的UA
  13. ppt给图片增加高斯模糊_PPT图片处理小技巧
  14. 什么是 10x 程序员?
  15. 苏宁搭台品牌唱戏,净水市场将变天
  16. DNS漏洞影响数百万物联网设备安全,ZDNS打造Safeguard安全威胁管控系统,精准防御实现网络安全防线前移
  17. 爱立信实验室实习感想(二)
  18. 输出数组中数字排名(不允许并列排名)
  19. (附源码)基于SpringBoot小而学在线考试系统 毕业设计141507
  20. Springfox Swagger2(一):概述

热门文章

  1. 《DFC-Net:Deep Flow-Guided Video Inpainting》论文笔记
  2. 8.绘制统计图形——直方图
  3. RedPitaya火龙果板基础操作
  4. Python数据分析实战之北京二手房房价分析
  5. Java 实战:桌球小游戏
  6. 在vue项目中使用supermap,基于 SuperMap iClient 8C(2017) for JavaScript,底图为天地图
  7. Python输出emoji表情包
  8. C++程序的设计机制1:NVI机制(Non-Virtual Interface )
  9. QGIS:让数据随时间动起来
  10. 大数据解决方案:Hadoop监控