啾啾啾~

来自:

  1. https://www.jb51.net/article/88109.htm
  2. https://www.jb51.net/article/168179.htm
  3. https://blog.csdn.net/yupu56/article/details/72624229
public class DecryptionTool{/// <summary>/// RSA加密/// </summary>/// <param name="strText">待加密内容</param>/// <param name="strPublicKey">公钥</param>/// <returns></returns>public string Encrypt(string strText, string strPublicKey){RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();rsa.FromXmlString(strPublicKey);byte[] byteText = Encoding.UTF8.GetBytes(strText);byte[] byteEntry = rsa.Encrypt(byteText, false);return Convert.ToBase64String(byteEntry);}/// <summary>/// RSA解密/// </summary>/// <param name="strEntryText">待解密</param>/// <param name="strPrivateKey">私钥</param>/// <returns></returns>public string Decrypt(string strEntryText, string strPrivateKey){RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();rsa.FromXmlString(strPrivateKey);byte[] byteEntry = Convert.FromBase64String(strEntryText);byte[] byteText = rsa.Decrypt(byteEntry, false);return Encoding.UTF8.GetString(byteText);}/// <summary>/// 获取密钥/// </summary>/// <returns></returns>public Dictionary<string, string> GetKey(){Dictionary<string, string> dictKey = new Dictionary<string, string>();RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();dictKey.Add("PublicKey", rsa.ToXmlString(false));dictKey.Add("PrivateKey", rsa.ToXmlString(true));return dictKey;}/// <summary>/// 生成数字签名/// </summary>/// <param name="originalText">原文</param>/// <param name="privateKey"></param>/// <returns></returns>public string GenSign(string originalText, string privateKey){byte[] byteData = Encoding.UTF8.GetBytes(originalText);RSACryptoServiceProvider provider = new RSACryptoServiceProvider();provider.FromXmlString(privateKey);//使用SHA1进行摘要算法,生成签名byteData = provider.SignData(byteData, new SHA1CryptoServiceProvider());return Convert.ToBase64String(byteData);}/// <summary>/// 验证签名/// </summary>/// <param name="originalText">原文</param>/// <param name="SignedData">签名</param>/// <param name="publicKey">公钥</param>/// <returns></returns>public bool VerifySigned(string originalText, string signedData, string publicKey){RSACryptoServiceProvider provider = new RSACryptoServiceProvider();provider.FromXmlString(publicKey);byte[] byteData = Encoding.UTF8.GetBytes(originalText);byte[] signData = Convert.FromBase64String(signedData);return provider.VerifyData(byteData, new SHA1CryptoServiceProvider(), signData);}/// <summary>  /// RSA私钥格式转换,java->.net  /// </summary>  /// <param name="privateKey">java生成的RSA私钥</param>  /// <returns></returns>  public string RSAPrivateKeyJava2DotNet(string privateKey){RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKey));return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>",Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()),Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()),Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()),Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()),Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()),Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()),Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()),Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned()));}/// <summary>/// AES加密/// </summary>/// <param name="text">加密字符</param>/// <param name="password">加密的密码</param>/// <param name="iv">密钥</param>/// <returns></returns>public string AESEncrypt(string text, string password, string iv){RijndaelManaged rijndaelCipher = new RijndaelManaged();rijndaelCipher.Mode = CipherMode.CBC;rijndaelCipher.Padding = PaddingMode.PKCS7;rijndaelCipher.KeySize = 128;rijndaelCipher.BlockSize = 128;byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password);byte[] keyBytes = new byte[16];int len = pwdBytes.Length;if (len > keyBytes.Length) len = keyBytes.Length;System.Array.Copy(pwdBytes, keyBytes, len);rijndaelCipher.Key = keyBytes;byte[] ivBytes = System.Text.Encoding.UTF8.GetBytes(iv);rijndaelCipher.IV = new byte[16];ICryptoTransform transform = rijndaelCipher.CreateEncryptor();byte[] plainText = Encoding.UTF8.GetBytes(text);byte[] cipherBytes = transform.TransformFinalBlock(plainText, 0, plainText.Length);return Convert.ToBase64String(cipherBytes);}/// <summary>/// AES解密/// </summary>/// <param name="text"></param>/// <param name="password"></param>/// <param name="iv"></param>/// <returns></returns>public string AESDecrypt(string text, string password, string iv){RijndaelManaged rijndaelCipher = new RijndaelManaged();rijndaelCipher.Mode = CipherMode.CBC;rijndaelCipher.Padding = PaddingMode.PKCS7;rijndaelCipher.KeySize = 128;rijndaelCipher.BlockSize = 128;byte[] encryptedData = Convert.FromBase64String(text);byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password);byte[] keyBytes = new byte[16];int len = pwdBytes.Length;if (len > keyBytes.Length) len = keyBytes.Length;System.Array.Copy(pwdBytes, keyBytes, len);rijndaelCipher.Key = keyBytes;byte[] ivBytes = System.Text.Encoding.UTF8.GetBytes(iv);rijndaelCipher.IV = ivBytes;ICryptoTransform transform = rijndaelCipher.CreateDecryptor();byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);return Encoding.UTF8.GetString(plainText);}}

C# RSA、AES加密解密相关推荐

  1. RSA + AES加密原理,一线大厂主流的加密手段,流程浅析,有十分详细的测试Demo

    原创博文,欢迎转载,转载时请务必附上博文链接,感谢您的尊重. 系列文章目录 RSA+AES数据传输的加密解密[篇],项目实战(专题汇总): AES 加密解密简述 + 完美工具类 AESUtils RS ...

  2. Python crypto模块实现RSA和AES加密解密

    Python crypto模块实现RSA和AES加密解密 Python的crypto是用于RSA加密解密,AES加密解密的. 一.RSA和AES简介 RSA加密算法是一种非对称加密算法.RSA 是19 ...

  3. java rsa 117_java实现RSA非对称加密解密

    之前写过一篇java实现AES对称加密解密 在对密码加密传输的场景下 RSA非对称加密解密可能会更加适合. 原理就是后台生成一对公钥和私钥,公钥给前端用来加密,后台用私钥去解密,保证了传输过程中就算被 ...

  4. AES加密解密(ECB模式)

    高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES, ...

  5. AES加密解密(CBC模式)

    高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES, ...

  6. java实现双向RSA + AES加密

    本文主要讲解在APP上如何实现双向RSA + AES加密. 先上一张主要流程图: 场景预设: 由于客户端是APP而不是网页,APP在第一次加载的时候会生成一对RSA秘钥对(我们称它为APP公钥私钥,不 ...

  7. 加密解密_使用RSA密钥对加密解密数据

    使用RSA密钥对加密解密数据 作者: 郭政鸿 2021/1/6 前言: 前几天看了非对称加密, 那非对称加密处理常见的https中的应用, 平时我们可以用来做什么呢? 1. 生成RSA密钥对 使用op ...

  8. java php aes加密解密_php aes 加密解密可与java对接

    php aes 加密解密可与java对接 博主:liu1693 发表时间:2017-02-23 16:52:27 浏览量:100 class Encrypt{ //加密方法 public static ...

  9. android、ios、php之间AES加密解密

    使用原因: 因为在项目中,需要在与客户端(IOS,Android)交互的时候,保存一些私有信息,不被别人看到,所以,使用了比较流行的可以反向加解密的AES. PHP 源码 <?php$aes = ...

  10. python 加密解密_python实现AES加密解密

    本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原 ...

最新文章

  1. LeetCode简单题之Excel表列名称
  2. 浅淡Windows7 32位与64位/x86与x64的区别
  3. AS整理代码快捷键 ctl+alt+L
  4. python在哪下载-python在哪里下载
  5. 静态多态之泛型编程(模板)
  6. [周末阅读]认知和规划,以及推荐几个入门教程Github
  7. code vs 集成tfs_10大Python集成开发环境和代码编辑器
  8. 中缀表达式转后缀表达式
  9. 为SoC-FPGA添加TFT显示屏和USB键盘
  10. ESP8266连接网络,获取网络天气api
  11. [音乐推荐]水木年华 - 借我一生
  12. 1000:从今天开始入坑C语言
  13. 2022小米运维开发笔试1
  14. 获得Windows主机的主机序列号
  15. python爬取微博评论点赞数_python 爬虫 爬微博 分析 数据
  16. 运行时异常和非运行时异常(一般异常)的区别
  17. 大脑的默认模式网络DMN
  18. 互联网日报 | 3月9日 星期二 | 我国将修改反垄断法;BOSS直聘职场性别差异报告,城镇就业女性的平均薪酬为6847元...
  19. 原来耳机还可以这么酷,哈氪零度无线耳机要音质更有颜值
  20. C#控件随窗体大小动态调整

热门文章

  1. 局域网使用NAT进行测试第三方接口
  2. Driver error 11
  3. 【寻找最佳小程序】01期:影视评分小工具“豆瓣评分”——产品设计要点及专家评析
  4. css过度效果及动画效果
  5. java标签用setbounds,java-摆动setResizable和setBounds
  6. Python创建临时文件和文件夹
  7. 创建不带参数的存储过程
  8. 网易云那些触动人心的经典热评
  9. 51单片机的中断源入口地址是程序存储器空间的5个单元
  10. 人眼中的光 —— 光强,光通量,光照度,光亮度是什么