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常用加密和解密算法相关推荐

  1. 常用加密与解密算法示例代码

    一.System.Security.Cryptography 命名空间 System.Security.Cryptography 命名空间提供加密服务,包括安全编码和解码的数据,以及许多其他操作,如哈 ...

  2. java偶校验计算代码_191120_02 Java常用加密校验转换算法汇总

    Java常用加密校验转换算法汇总 作者:邵发 官网:http://afanihao.cn/java 本文是Java学习指南系列教程的官方配套文档.内容介绍Java里的常用算法的使用,包含转换Hex / ...

  3. 不错的威盾PHP加密专家解密算法

    <?php /*********************************** *威盾PHP加密专家解密算法 http://www.my400800.cn **************** ...

  4. 常见的加密和解密算法—MD5

    转载:https://www.cnblogs.com/maohuidong/p/7967257.html 常见的加密和解密算法-MD5 一.MD5加密概述 Message Digest Algorit ...

  5. aes加密算法python实现_Python基于pycrypto实现的AES加密和解密算法示例

    本文实例讲述了Python基于pycrypto实现的AES加密和解密算法.分享给大家供大家参考,具体如下: 一 代码 # -*- coding: UTF-8 -*- import string imp ...

  6. 简单移位密码——凯撒加密、解密算法

    简单移位密码--凯撒加密.解密算法 移位密码是简单的替换密码(simple substitution cipher),即将明文的一个字符用相应的一个密文字符替换. 算法描述:设P=C=K=Z26,对k ...

  7. C语言加密和解密算法

    C语言加密和解密算法 简介:字符串的加密和解密方法一直被广泛应用,最常见的无非是 MD5 散列函数(MD5是信息摘要的一种,可以从任意长度的字符串生成128位的哈希值). 先来看代码:(注意作者代码中 ...

  8. 字符串加密、解密算法

    字符串加密.解密算法包括: MD5.Des.Base64三种方式,详情如下所示:using System; using System.Collections.Generic; using System ...

  9. 27-字符串加密和解密算法

    思路 根据题意,思路是比较好想的,但是要注意以下两点 加密时,要注意偏移之后的值(下标 + 5)不能超能ascii码所能表示的范围. 解秘时,要注意偏移之后的值(下标 - 5)不能小于0,所以需要加上 ...

  10. 威盾php官网,威盾PHP加密专家解密算法

    /*********************************** *威盾PHP加密专家解密算法 By:Neeao *2009-09-10 *************************** ...

最新文章

  1. 硕博士申请--阿德莱德大学 AI组介绍(含组员/顶会论文等)
  2. Native wifi API使用
  3. 面试常考:Synchronized 有几种用法?
  4. BZOJ 1798: [Ahoi2009]Seq 维护序列seq
  5. 终于有人把自然语言处理、机器学习、深度学习和AI讲明白了
  6. request.form以及postman发送表单数据
  7. 计算机学科研究方向统计
  8. 计算机指令vbs,vbs脚本大全,配有实例 DOS命令,批处理 脚本 代码
  9. sublime linux 中文 版,Linux 下 Sublime Text 3 中文输入 (Debian 系通用)
  10. Vue跨域问题解决方案
  11. html打印预览空白,win7系统下使用IE浏览器预览打印页面时显示页面空白
  12. amd一键超频怎么用_AMD Ryzen小白说明书——CPU超频篇
  13. 用C语言求解一元二次方程组
  14. GreenPlum 大数据平台--安装
  15. openssl私有CA证书签发与单双向认证
  16. SVN上文件出现左侧黄色箭头右侧绿色箭头的双向箭头
  17. java jtextarea 滚动条_Java Swing JTextArea自动添加滚动条
  18. 恢复系统设置或计算机点击没反应,win7自带还原里quot;恢复系统设置或计算机quot;点击没反应...
  19. Spring源码(十)-IOC终结篇
  20. 将基于Spring的UnitTest集成到Maven中

热门文章

  1. 聪明人懂得深交四种人,绝交三种人!
  2. MAC 浏览器长截屏 滚动截屏
  3. layer.open中使用时间控件laydate失败不显示的解决方案
  4. 学习在layui中input、select、date日历的onchange事件无效解决方法
  5. ADS(Advanced Design system)仿真测试元器件在不同功率下的输入阻抗
  6. 千峰前端html个人笔记
  7. 74LS系列芯片简记——00-09
  8. linux下查看共享文件夹,在Linux下查看共享文件夹
  9. Cosos H5开发工具箱(上)
  10. coreldraw x4如何出血_CorelDRAW软件出血位详解