当前位置: 首页 > news >正文

C# 加解密之RSA

RSA,非对称加密,简单可以理解为现在有两把钥匙,一把只能用来开,一把只能用来关,所以这跟前面写的对称加密是不一样的;

原理和算法的话,不谈。。。还是自己去查吧,费脑子。

主要说下优缺点吧,首先就是RSA的安全性高,嗯,很高,比DES和AES要高很多,但由于密钥长度或者算法复杂度的提高就会带来性能的损失,所以RSA的效率就比较低,所以我们一般不会采用RSA加密一些大的数据,如果非要加密的话,可以采用混合加密,比如DES或者AES来加密数据,用RSA来加密密钥;或者采用分块加密的方式,即只加密其中一部分或者关键部分。

RSA一般公钥用来加密,私钥用来做解密,所以我们这里需要预先生成两把密钥。生成密钥的方式也有很多种,这里就采用最直接的方式了。

实现功能:

- 使用RSA加密方式加解密文本数据

开发环境:

开发工具: Visual Studio 2013

.NET Framework版本:4.5

实现代码:

  /// <summary>/// 生成公钥和私钥/// </summary>/// <returns></returns>public static RsaKey CreateKey(){RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();RsaKey rsaKey = new RsaKey();rsaKey.PublicKey=rsaProvider.ToXmlString(false);rsaKey.PrivateKey = rsaProvider.ToXmlString(true);return rsaKey;}/// <summary>/// RSA加密/// </summary>/// <param name="rsaModel"></param>/// <returns></returns>public static byte[] Encrypt(RsaModel rsaModel){RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();byte[] result = null;try{rsaProvider.FromXmlString(rsaModel.Key);result = rsaProvider.Encrypt(rsaModel.Data, false);}catch { }return result;}/// <summary>/// RSA解密/// </summary>/// <param name="rsaModel"></param>/// <returns></returns>public static byte[] Decrypt(RsaModel rsaModel){RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();byte[] result = null;try{rsaProvider.FromXmlString(rsaModel.Key);result = rsaProvider.Decrypt(rsaModel.Data, false);}catch { }return result;}/// <summary>/// RSA加密字符串/// </summary>/// <param name="data">要加密的字符串</param>/// <param name="key">公钥</param>/// <returns></returns>public static string Encrypt(string data, string key){byte[] bytes = Encoding.UTF8.GetBytes(data);byte[] result = Encrypt(new RsaModel{Data = bytes,Key = key});if (result == null){return "";}return Convert.ToBase64String(result);}/// <summary>/// RSA解密字符串/// </summary>/// <param name="data">要解密的字符串</param>/// <param name="key">私钥</param>/// <returns></returns>public static string Decrypt(string data, string key){byte[] bytes = Convert.FromBase64String(data);byte[] result = Decrypt(new RsaModel{Data = bytes,Key = key});if (result == null){return "";}return Encoding.UTF8.GetString(result);}public class RsaKey{/// <summary>/// 公钥/// </summary>public string PublicKey { get; set; }/// <summary>/// 私钥/// </summary>public string PrivateKey { get; set; }}public class RsaModel{/// <summary>/// 需要加密/解密的数据/// </summary>public byte[] Data { get; set; }/// <summary>/// 密钥(加密:公钥;解密:私钥)/// </summary>public string Key { get; set; }}
  RsaUtil.RsaKey rsaKey = new RsaUtil.RsaKey();private void btn_Rsa_Encrypt_Click(object sender, EventArgs e){rsaKey = RsaUtil.CreateKey();string result = RsaUtil.Encrypt(textBox1.Text, rsaKey.PublicKey);textBox2.Text = result;}private void btn_Rsa_Decrypt_Click(object sender, EventArgs e){string result = RsaUtil.Decrypt(textBox2.Text, rsaKey.PrivateKey);textBox1.Text = result;}

实现效果:

由简入繁,拿来即用

更多精彩,请持续关注公众号:


http://www.mrgr.cn/news/20756.html

相关文章:

  • 828华为云征文 | Flexus X实例与华为云EulerOS的Tomcat安装指南
  • 文本字符分割算法尝试
  • React-CSS
  • C++ 在给定斜率的线上找到给定距离处的点(Find points at a given distance on a line of given slope)
  • iOS——APP启动流程
  • 【C语言从不挂科到高绩点】13-二维数组以及数组元素增加和删除
  • 盘古信息IMS MOM,高效灵活的企业数字化解决方案
  • 开放式运动耳机好不好用?超靠谱好评榜单实物测评
  • 美团面试:mysql 索引失效?怎么解决? (重点知识,建议收藏,读10遍+)
  • 录屏没声音怎么办?3招解决,教您秒变声音大师
  • 【Boost】Asio库学习(一)
  • 号称第一本程序员的Agent入门书籍?《大模型应用开发 动手做AI Agent》来了!
  • 基于SringBoot框架的智慧博物馆预约平台
  • Spark常见面试题整理
  • Java队列详细解释
  • VLDB 2024论文解读丨GaussDB:计算-内存-存储三层池化解耦的多主云原生数据库
  • 基于51单片机的倒计时装置proteus仿真
  • Java高级编程—多线程(完整详解线程的三种实现方式、以及守护线程、出让线程、插入线程、线程声明周期等,附有代码+案例)
  • 零基础入门~汇编语言(第四版王爽)~第4章 第一个程序
  • 前端面试:margin和padding分别适合什么场景使用?