c#实现MD5、DES、RSA加密解功能 |
您所在的位置:网站首页 › 抖音账号怎么解封 › c#实现MD5、DES、RSA加密解功能 |
一、MD5不可逆加密
源码如下: /// /// MD5不可逆加密 /// 1 防止被篡改 /// 2 防止明文存储 /// 3 防止抵赖,数字签名 /// /// 要加密的文本 /// 加密成功后密文的长度 /// 加密之后的文本 public static string MD5Encrypt(string data, EncryptEnum encryptEnum = EncryptEnum.Default) { if (string.IsNullOrEmpty(data)) return null; //创建MD5新实例 MD5 md5 = MD5.Create(); //选择UTF8编码格式=>把需要加密的文本转成二进制 byte[] bytes = Encoding.UTF8.GetBytes(data); //把二进制数据转成哈希码 byte[] hashValue = md5.ComputeHash(bytes); string result = string.Empty; int max = 0, min = 0; switch (encryptEnum) { case EncryptEnum.Default://c#系统默认加密长度就是32位 case EncryptEnum.ThirtyTwo://32位加密长度 max = 16; //max = hashValue.Length; break; case EncryptEnum.Sixteen://16位密文是32位密文的9到24位字符 max = 12; min = 4; break; } for (int i = min; i < max; i++) { result += hashValue[i].ToString("x2"); } return result; }我在这里封装了一个可供用户选择加密长度的枚举,用来计算加密之后密文文本长度使用的,当然,这是一个可控参数,用户不输入,则默认位c#系统默认MD5加密长度32位 public enum EncryptEnum { /// /// 系统默认加密 /// Default = 0, /// /// 16位加密 /// Sixteen = 16, /// /// 三十二位加密 /// ThirtyTwo = 32 } 二、DES可逆、对称加密 DES加密必须要指定他的公开的加密Key和IV,我在代码上方定义了一个通过字符串转成的Key和IV,这个字符串大家可以随便填写。源码如下: /// /// DES AES Blowfish /// 对称加密算法的优点是速度快, /// 缺点是密钥管理不方便,要求共享密钥。 /// 可逆对称加密 密钥长度8 /// //二进制 key, iv private static byte[] byteKey = Encoding.ASCII.GetBytes("12345678"); private static byte[] byteIV = Encoding.ASCII.GetBytes("87654321"); /// /// DES可逆 对称加密 /// /// 要加密的文本 /// 64进制字符串 public static string DESEncrypt(string data) { //DES加密实例化 DESCryptoServiceProvider desp = new DESCryptoServiceProvider(); using (MemoryStream ms = new MemoryStream())//创建内存流 { //把数据流 => 加密流 //CreateEncryptor方法是DES官方加密算法 CryptoStream cs = new CryptoStream(ms, desp.CreateEncryptor(byteKey, byteIV), CryptoStreamMode.Write); //实例化写入流 StreamWriter sw = new StreamWriter(cs); sw.Write(data);//向流中写入需要加密的数据 sw.Flush();//关闭写入器 cs.FlushFinalBlock(); //关闭转换流 ms.Flush();//关闭内存流 return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); } } /// /// DES 可逆 对称解密 /// /// 需要解密的64进制字符串 /// 解析后的字符串 public static string DESDecrypt(string data) { //DES加密实例化 using (DESCryptoServiceProvider desp = new DESCryptoServiceProvider()) { //把64进制字符串 => 二进制流 byte[] buffer = Convert.FromBase64String(data); using (MemoryStream ms = new MemoryStream()) { //把加密流 => 数据流 //CreateDecryptor方法是DES官方解密算法 CryptoStream cs = new CryptoStream(ms, desp.CreateDecryptor(byteKey, byteIV), CryptoStreamMode.Write); cs.Write(buffer, 0, buffer.Length);//向流中写入要解析的数据 cs.FlushFinalBlock();//关闭转换流 return Encoding.UTF8.GetString(ms.ToArray()); } } } 三、RSA可逆、非对称加密 RSA加密,必须要使用xml信息的公钥和私钥才能对其进行加密解密操作,所以也在代码上方封住了一个获取公钥私钥的方法,大家可以参考以下代码。源码如下 /** * RSA ECC * 可逆非对称加密 * 非对称加密算法的优点是密钥管理很方便,缺点是速度慢。 * */ /// /// 获取RSA加密解密的公钥和私钥 /// /// public static Dictionary GetPublicAndPrivateKey() { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); string publicKey = rsa.ToXmlString(false);//包含RSA公钥信息的字符串 string privateKey = rsa.ToXmlString(true);//包含RSA公钥和私钥信息的字符串 return new Dictionary { { publicKey, privateKey } }; } /// /// RSA 可逆 非对称加密 /// /// 要加密的文本 /// 必须是包含xml信息的加密使用的公钥 /// 64进制加密之后的字符串文本 public static string RSAEncrypt(string data, string publicKey) { //实例化RSA加密流 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(publicKey);//解析xml公钥信息 UnicodeEncoding ue = new UnicodeEncoding();//utf-16编码格式 byte[] bytes = ue.GetBytes(data);//把文本 => 二进制 //对文本二进制进行加密,false 不适用默认填充文本 byte[] resultBytes = rsa.Encrypt(bytes, false); return Convert.ToBase64String(resultBytes); } /// /// RSA 可逆 非对称解密 /// /// 要解密64进制的文本 /// 必须是包含xml信息的解密使用的私钥 /// 解析成功的文本 public static string RSADecrypt(string data, string privateKey) { //把64进制字符串转成二进制流 byte[] bytes = Convert.FromBase64String(data); //实例化RSA加密流 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(privateKey);//解析xml私钥信息 byte[] resultBytes = rsa.Decrypt(bytes, false); UnicodeEncoding ue = new UnicodeEncoding();//utf-16编码格式 return ue.GetString(resultBytes); } 四、MD5、DES、RSA,加密\解密调用简单示例:如图,我定义了一个接口,让他在控制台打印加密解密的数据 如上图所示:跟我们预料的结果一样,加密解密非常成功。 今天的MD5、DES、RSA加密解功能到这里就分享完毕了,大家有什么更加好用的加密解密方法欢迎来评论区讨论!!! |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |