C# RSA、AES加密解密
啾啾啾~
来自:
- https://www.jb51.net/article/88109.htm
- https://www.jb51.net/article/168179.htm
- 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加密解密相关推荐
- RSA + AES加密原理,一线大厂主流的加密手段,流程浅析,有十分详细的测试Demo
原创博文,欢迎转载,转载时请务必附上博文链接,感谢您的尊重. 系列文章目录 RSA+AES数据传输的加密解密[篇],项目实战(专题汇总): AES 加密解密简述 + 完美工具类 AESUtils RS ...
- Python crypto模块实现RSA和AES加密解密
Python crypto模块实现RSA和AES加密解密 Python的crypto是用于RSA加密解密,AES加密解密的. 一.RSA和AES简介 RSA加密算法是一种非对称加密算法.RSA 是19 ...
- java rsa 117_java实现RSA非对称加密解密
之前写过一篇java实现AES对称加密解密 在对密码加密传输的场景下 RSA非对称加密解密可能会更加适合. 原理就是后台生成一对公钥和私钥,公钥给前端用来加密,后台用私钥去解密,保证了传输过程中就算被 ...
- AES加密解密(ECB模式)
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES, ...
- AES加密解密(CBC模式)
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES, ...
- java实现双向RSA + AES加密
本文主要讲解在APP上如何实现双向RSA + AES加密. 先上一张主要流程图: 场景预设: 由于客户端是APP而不是网页,APP在第一次加载的时候会生成一对RSA秘钥对(我们称它为APP公钥私钥,不 ...
- 加密解密_使用RSA密钥对加密解密数据
使用RSA密钥对加密解密数据 作者: 郭政鸿 2021/1/6 前言: 前几天看了非对称加密, 那非对称加密处理常见的https中的应用, 平时我们可以用来做什么呢? 1. 生成RSA密钥对 使用op ...
- java php aes加密解密_php aes 加密解密可与java对接
php aes 加密解密可与java对接 博主:liu1693 发表时间:2017-02-23 16:52:27 浏览量:100 class Encrypt{ //加密方法 public static ...
- android、ios、php之间AES加密解密
使用原因: 因为在项目中,需要在与客户端(IOS,Android)交互的时候,保存一些私有信息,不被别人看到,所以,使用了比较流行的可以反向加解密的AES. PHP 源码 <?php$aes = ...
- python 加密解密_python实现AES加密解密
本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原 ...
最新文章
- LeetCode简单题之Excel表列名称
- 浅淡Windows7 32位与64位/x86与x64的区别
- AS整理代码快捷键 ctl+alt+L
- python在哪下载-python在哪里下载
- 静态多态之泛型编程(模板)
- [周末阅读]认知和规划,以及推荐几个入门教程Github
- code vs 集成tfs_10大Python集成开发环境和代码编辑器
- 中缀表达式转后缀表达式
- 为SoC-FPGA添加TFT显示屏和USB键盘
- ESP8266连接网络,获取网络天气api
- [音乐推荐]水木年华 - 借我一生
- 1000:从今天开始入坑C语言
- 2022小米运维开发笔试1
- 获得Windows主机的主机序列号
- python爬取微博评论点赞数_python 爬虫 爬微博 分析 数据
- 运行时异常和非运行时异常(一般异常)的区别
- 大脑的默认模式网络DMN
- 互联网日报 | 3月9日 星期二 | 我国将修改反垄断法;BOSS直聘职场性别差异报告,城镇就业女性的平均薪酬为6847元...
- 原来耳机还可以这么酷,哈氪零度无线耳机要音质更有颜值
- C#控件随窗体大小动态调整