MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法)

MD5算法具有以下特点:

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

2、容易计算:从原数据计算出MD5值很容易。

3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。

通过文件路径得到文件MD5值 

public static string GetMD5HashFromFile(string fileName){try{FileStream file = new FileStream(fileName, FileMode.Open);System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();byte[] retVal = md5.ComputeHash(file);file.Close();StringBuilder sb = new StringBuilder();for (int i = 0; i < retVal.Length; i++){sb.Append(retVal[i].ToString("x2"));}return sb.ToString();}catch (Exception ex){throw new Exception("GetMD5HashFromFile() fail,error:" + ex.Message);}}

通过流路径得到MD5值

public static string GetMd5Hash(Stream input){MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();byte[] data = md5Hasher.ComputeHash(input);input.Seek(0, SeekOrigin.Begin);StringBuilder sBuilder = new StringBuilder();for (int i = 0; i < data.Length; i++){sBuilder.Append(data[i].ToString("x2"));}return sBuilder.ToString();}

测试发现:通过文件流去得到MD5值,改变了文件的后缀名是没有区别的。

字符串MD5值

public static string GetMd5Hash(string input){// Create a new instance of the MD5CryptoServiceProvider object.MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();// Convert the input string to a byte array and compute the hash.byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));// Create a new Stringbuilder to collect the bytes// and create a string.StringBuilder sBuilder = new StringBuilder();// Loop through each byte of the hashed data // and format each one as a hexadecimal string.for (int i = 0; i < data.Length; i++){sBuilder.Append(data[i].ToString("x2"));}// Return the hexadecimal string.return sBuilder.ToString();}

字符串MD5值对比

       // Verify a hash against a string. md5值不区分大小写public static bool VerifyMd5Hash(string input, string hash){// Hash the input.string hashOfInput = getMd5Hash(input);// Create a StringComparer an compare the hashes.StringComparer comparer = StringComparer.OrdinalIgnoreCase;if (0 == comparer.Compare(hashOfInput, hash)){return true;}else{return false;}}

C# MD5摘要算法、哈希算法相关推荐

  1. MD5密码哈希算法(c语言实现)

    MD5密码哈希算法(c语言实现) 本人为大学生在校生,所写源码有诸多不足,希望各位多多指正.编译器为Dev C++ #include<bits/stdc++.h> using namesp ...

  2. 摘要算法(哈希算法)

    1. HASH算法 哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要. 哈希函数的主要作用不是完成数据加密与解密工作,它是用来检验数 ...

  3. data_structure_and_algorithm -- 哈希算法(上):如何防止数据库中的用户被脱库?

    最近写的文章有点杂,看上去东一点西一点,最后会在博客目录中捋顺的. 今天主要看一下哈希算法的应用,主要参考:前谷歌工程师王争的课程,感兴趣可以通过下面方式微信扫码购买: 还记得 2011 年 CSDN ...

  4. 哈希算法(一)---如何防止数据库中的用户信息被脱库?

    目录 什么是哈希算法? 应用一:安全加密 应用二:唯一标识 应用三:数据校验 应用四:散列函数 解答开篇 内容小结 课后思考 还记得 2011 年 CSDN 的"脱库"事件吗?当时 ...

  5. 算法学习笔记13:哈希算法

    哈希算法(上):如何防止数据库中的用户信息被脱库 什么是哈希算法 应用一:安全加密 应用二:唯一标识 应用三:数据校验 应用四:散列函数 解答开篇 哈希算法(下):哈希算法在分布式系统中有哪些应用 应 ...

  6. 一致性哈希算法 mysql_一致性哈希算法 CARP 原理解析, 附 Golang 实现

    一致性哈希算法 CARP 原理解析, 附 Golang 实现 在后端服务开发的过程中, 遇到了这样一个问题: 需要在 mysql 前面部署 redis 做一层缓存, 要求 redis 是集群部署, 并 ...

  7. md5不是对称密码算法_密码学中的消息摘要算法5(MD5)

    md5不是对称密码算法 In cryptography, MD5 (Message-Digest algorithm 5) is a mainly used cryptographic hash fu ...

  8. 哈希算法--MD5算法

    1. Hash算法 哈希算法也称摘要算法.散列算法,哈希函数的输入为一段可变长度x,输出一固定长度串,该串被称为x的哈希值. Hash函数满足以下几个基本需求: (1)输入值x为任意长度 (2)输出值 ...

  9. 【计算机网络】网络安全 : 报文鉴别 ( 密码散列函数 | 报文摘要算法 MD5 | 安全散列算法 SHA-1 | MAC 报文鉴别码 )

    文章目录 一.报文鉴别 二.鉴别分类 三.报文鉴别 四.密码散列函数 五.MD5 算法 六.SHA-1 安全散列算法 七.MAC 报文鉴别码 一.报文鉴别 计算机网络安全措施 : ① 针对被动攻击 ( ...

最新文章

  1. python中ret是什么意思_数据结构图在python中的应用
  2. mysql 读写分离中间层
  3. 在linux下实现拓扑排序,数据结构——有向图(拓扑排序算法)
  4. boost::hana::repeat用法的测试程序
  5. 解决linux系统CentOS下调整home和根分区大小的方法
  6. 防火墙(3)——iptables(1)
  7. 在ABAP里实现条件断点的三种方式
  8. [php]Undefined offset: 0错误
  9. .NET 基金会项目介绍 - ReactiveUI
  10. 使用Spring Boot 2通过OAuth2和JWT进行集中授权
  11. EasyUI加zTree使用解析 easyui修改操作的表单回显方法 验证框提交表单前验证 datagrid的load方法
  12. 《Python Cookbook 3rd》笔记(3.15):字符串转换为日期
  13. oracle中查询某张表的大小
  14. Neither BindingResult nor plain target object for bean name 'xxx' availabl问题解决
  15. 车主吐槽某电动车保养割韭菜,却遭其总裁公开恐吓?车主:必须视频道歉
  16. 25 年 IT 老兵零基础写小说,作品堪比《三体》| 人物志
  17. python快速入门教程-Python 开发 14 天快速入门
  18. (二)OpenCV Mat常用属性和方法
  19. Q144:FS,求解流体方程(逻辑总结)
  20. SpringBoot 2.1.0 整合 WebSocket 通信

热门文章

  1. Qt Creator从Blender导出3D资产
  2. OpenGL SSAO屏幕空间环境光遮蔽的实例
  3. OpenGL linesmooth线平滑的实例
  4. C++ edit distances最小编辑距离(附完整源码)
  5. java数据结构有哪些_java有哪些数据结构?
  6. Numpy中的堆叠(stack)操作
  7. IntelliJ IDEA2017 修改缓存文件的路径(转载:https://www.cnblogs.com/acm-bingzi/p/ideaCachePath.html)
  8. python:beautifulSoup学习(来自学习资料)
  9. 窗口分析函数_18_算累计百分位数
  10. 【C语言】%[修饰符] 格式字符