.net常用加密和解密算法
MD5加密:(不可逆加密)
加解方法封装:
public class Encrypt{/// <summary>/// md5加密后返回密文/// </summary>/// <param name="source">要加密的明文</param>/// <returns></returns>public static string MD5Encrypt(string source){try{MD5 md5 = MD5.Create();byte[] data = md5.ComputeHash(Encoding.Default.GetBytes(source));StringBuilder sBuilder = new StringBuilder();for (int i = 0; i < data.Length; i++){sBuilder.Append(data[i].ToString("x2"));}return sBuilder.ToString();}catch (Exception ex){throw ex;}}/// <summary>/// 获取文件的md5摘要/// </summary>/// <param name="fileName">文件名称</param>/// <returns>文件摘要</returns>public static string AbstractFile(string fileName){using (FileStream stream = new FileStream(fileName, FileMode.Open)){MD5 md5 = new MD5CryptoServiceProvider();byte[] retVal = md5.ComputeHash(stream);StringBuilder sb = new StringBuilder();for (int i = 0; i < retVal.Length; i++){sb.Append(retVal[i].ToString("x2"));}return sb.ToString();}}}
实例:
Console.WriteLine(Encrypt.MD5Encrypt("123456"));
Console.WriteLine(Encrypt.AbstractFile(@"C:\Users\Administrator\Desktop\test\jquery.js"));
结果:
md5加密特点:
1.相同原文加密后的结果是一样的
2.不同长度的内容加密后长度是一样的
3.加密不可逆,不能通过密文解密出原文
4.原文差别很小,但加密后的结果差别很大
5.文件也可以经过加密产生摘要
md5加密应用:
1.系统登录的密码,经md5加密后将密文存在数据库中,用户登录时对用户输入的密码用md5加密后和数据库比较。(密码保存,防止看到明文)
2.源代码管理器,比如svn,文件有改动时,文件就会出现被改动的标记。(防篡改)
3.极速秒传,扫描文件的md5,跟已有的文件md5比对,吻合表示文件已存在则不再上传。
4.数字签名,把一些内容摘要一下,由权威的第三方去保障,将来这个文件就是由你做的,不能抵赖。
DES加密:(对称可逆加密)
app.config添加一个配置型,用于存储加密的key
<appSettings><add key="DesKey" value="hello666"/></appSettings>
加解密方法封装:
public class Encrypt{public static string DesKey = ConfigurationManager.AppSettings["DesKey"];private static byte[] _rgbKey = ASCIIEncoding.ASCII.GetBytes(DesKey.Substring(0, 8));private static byte[] _rgbIV = ASCIIEncoding.ASCII.GetBytes(DesKey.Insert(0, "w").Substring(0, 8));/// <summary>/// DES加密/// </summary>/// <param name="text">需要加密的值</param>/// <returns>加密后的结果</returns>public static string DesEncrypt(string text){DESCryptoServiceProvider dsp = new DESCryptoServiceProvider();using (MemoryStream memStream = new MemoryStream()){CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateEncryptor(_rgbKey, _rgbIV), CryptoStreamMode.Write);StreamWriter sWriter = new StreamWriter(crypStream);sWriter.Write(text);sWriter.Flush();crypStream.FlushFinalBlock();memStream.Flush();return Convert.ToBase64String(memStream.GetBuffer(), 0, (int)memStream.Length);}}/// <summary>/// DES解密/// </summary>/// <param name="encryptText">需要解密的值</param>/// <returns>解密后的结果</returns>public static string DesDecrypt(string encryptText){DESCryptoServiceProvider dsp = new DESCryptoServiceProvider();byte[] buffer = Convert.FromBase64String(encryptText);using (MemoryStream memStream = new MemoryStream()){CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateDecryptor(_rgbKey, _rgbIV), CryptoStreamMode.Write);crypStream.Write(buffer, 0, buffer.Length);crypStream.FlushFinalBlock();memStream.Flush();return ASCIIEncoding.UTF8.GetString(memStream.ToArray());}}}
实例:
string strDes = Encrypt.DesEncrypt("张三");
Console.WriteLine(strDes);
Console.WriteLine(Encrypt.DesDecrypt(strDes));
结果:
DES加密特点:
1.加密后能解密回原文,加密key和解密key是同一个。
2.加密解密的速度快,问题是密钥的安全性。
RSA加密:(不对称可逆加密)
加解密方法封装:
public class Encrypt{/// <summary>/// RSA随机生成一对密钥/// </summary>/// <returns>一对密钥值</returns>public static KeyValuePair<string, string> GetKeyPair(){RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();string publicKey = RSA.ToXmlString(false);string privateKey = RSA.ToXmlString(true);return new KeyValuePair<string, string>(publicKey, privateKey);}/// <summary>/// RSA加密(内容+加密key)/// </summary>/// <param name="content">内容</param>/// <param name="encryptKey">加密key</param>/// <returns>加密后的信息</returns>public static string RSAEncrypt(string content, string encryptKey){RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();rsa.FromXmlString(encryptKey);UnicodeEncoding ByteConverter = new UnicodeEncoding();byte[] DataToEncrypt = ByteConverter.GetBytes(content);byte[] resultBytes = rsa.Encrypt(DataToEncrypt, false);return Convert.ToBase64String(resultBytes);}/// <summary>/// RSA解密(内容+解密key)/// </summary>/// <param name="content">内容</param>/// <param name="descryptKey">解密key</param>/// <returns></returns>public static string RSADecrypt(string content, string descryptKey){byte[] dataToDecrypt = Convert.FromBase64String(content);RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();RSA.FromXmlString(descryptKey);byte[] resultBytes = RSA.Decrypt(dataToDecrypt, false);UnicodeEncoding ByteConverter = new UnicodeEncoding();return ByteConverter.GetString(resultBytes);}}
实例:
KeyValuePair<string, string> encryptDescypt = Encrypt.GetKeyPair();
string rsaEn = Encrypt.RSAEncrypt("123456",encryptDescypt.Key);
string rsaDe = Encrypt.RSADecrypt(rsaEn, encryptDescypt.Value);
Console.WriteLine(rsaEn);
Console.WriteLine(rsaDe);
结果:
RSA加密特点:
1.加密后能解密回原文,加密key和解密key不是同一个。
2.加密解密速度不快,但安全性好。
3.公开加密key,保证数据的安全传递。
4.公开解密key,保证数据的不可抵赖。
.net常用加密和解密算法相关推荐
- 常用加密与解密算法示例代码
一.System.Security.Cryptography 命名空间 System.Security.Cryptography 命名空间提供加密服务,包括安全编码和解码的数据,以及许多其他操作,如哈 ...
- java偶校验计算代码_191120_02 Java常用加密校验转换算法汇总
Java常用加密校验转换算法汇总 作者:邵发 官网:http://afanihao.cn/java 本文是Java学习指南系列教程的官方配套文档.内容介绍Java里的常用算法的使用,包含转换Hex / ...
- 不错的威盾PHP加密专家解密算法
<?php /*********************************** *威盾PHP加密专家解密算法 http://www.my400800.cn **************** ...
- 常见的加密和解密算法—MD5
转载:https://www.cnblogs.com/maohuidong/p/7967257.html 常见的加密和解密算法-MD5 一.MD5加密概述 Message Digest Algorit ...
- aes加密算法python实现_Python基于pycrypto实现的AES加密和解密算法示例
本文实例讲述了Python基于pycrypto实现的AES加密和解密算法.分享给大家供大家参考,具体如下: 一 代码 # -*- coding: UTF-8 -*- import string imp ...
- 简单移位密码——凯撒加密、解密算法
简单移位密码--凯撒加密.解密算法 移位密码是简单的替换密码(simple substitution cipher),即将明文的一个字符用相应的一个密文字符替换. 算法描述:设P=C=K=Z26,对k ...
- C语言加密和解密算法
C语言加密和解密算法 简介:字符串的加密和解密方法一直被广泛应用,最常见的无非是 MD5 散列函数(MD5是信息摘要的一种,可以从任意长度的字符串生成128位的哈希值). 先来看代码:(注意作者代码中 ...
- 字符串加密、解密算法
字符串加密.解密算法包括: MD5.Des.Base64三种方式,详情如下所示:using System; using System.Collections.Generic; using System ...
- 27-字符串加密和解密算法
思路 根据题意,思路是比较好想的,但是要注意以下两点 加密时,要注意偏移之后的值(下标 + 5)不能超能ascii码所能表示的范围. 解秘时,要注意偏移之后的值(下标 - 5)不能小于0,所以需要加上 ...
- 威盾php官网,威盾PHP加密专家解密算法
/*********************************** *威盾PHP加密专家解密算法 By:Neeao *2009-09-10 *************************** ...
最新文章
- 硕博士申请--阿德莱德大学 AI组介绍(含组员/顶会论文等)
- Native wifi API使用
- 面试常考:Synchronized 有几种用法?
- BZOJ 1798: [Ahoi2009]Seq 维护序列seq
- 终于有人把自然语言处理、机器学习、深度学习和AI讲明白了
- request.form以及postman发送表单数据
- 计算机学科研究方向统计
- 计算机指令vbs,vbs脚本大全,配有实例 DOS命令,批处理 脚本 代码
- sublime linux 中文 版,Linux 下 Sublime Text 3 中文输入 (Debian 系通用)
- Vue跨域问题解决方案
- html打印预览空白,win7系统下使用IE浏览器预览打印页面时显示页面空白
- amd一键超频怎么用_AMD Ryzen小白说明书——CPU超频篇
- 用C语言求解一元二次方程组
- GreenPlum 大数据平台--安装
- openssl私有CA证书签发与单双向认证
- SVN上文件出现左侧黄色箭头右侧绿色箭头的双向箭头
- java jtextarea 滚动条_Java Swing JTextArea自动添加滚动条
- 恢复系统设置或计算机点击没反应,win7自带还原里quot;恢复系统设置或计算机quot;点击没反应...
- Spring源码(十)-IOC终结篇
- 将基于Spring的UnitTest集成到Maven中