MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被计算机安全领域广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),
用以提供消息的完整性保护,用于确保信息传输完整一致。
MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。

MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆。所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后,把得到的散列值和原始的数据形成一个一对一的映射表,通过比在表中比破解密码的MD5算法散列值,通过匹配从映射表中找出破解密码所对应的原始明文。

MD5算法具有以下特点:

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。

MD5算法使用的特性:

方便存储:MD5加密出来都是32位的字符串,能够给定固定大小的空间存储,传输,验证
文件加密:MD5算法运用在文件加密上很有优势,应为只需要32为字符串就能对一个巨大的文件进行验证完整性
不 可 逆:MD5加密出来只会截取末尾32位,具有良好的安全性,如果是对于参数加密很难伪造MD5
加密损耗低:MD5算法加密对于性能的消耗微乎其微(速度快)

MD5算法的实际应用

1.密码验证
可以当做密码验证,为了保证密码不在cmd5网站上破译,最好加盐及乱序,也可以只取一部分md5加密后的内容。md5是不可逆算法,只要保证算法不变,就能和数据库中的md5相匹配。
邮箱密码验证过程:首先用户创建邮箱时,邮件系统会对密码进行md5加密后存储到数据库,这个时候在数据库里面看到的密码是加密的,保证密码只能用户自己知道,减少密码泄漏的风险。
等到你登陆邮箱时,系统不是检验用户的密码,而是检验用户输入的密码经md5加密以后和数据库内加密密码进行对比,判断是否相等。

2.请求参数校验
对于服务器来来说,除了系统问题最大的问题就是害怕请求被拦截,拦截后修改参数后就会出现很多漏洞的可能性。
为了避免被拦截、参数被修改,常用方法就是对请求参数进行校验,就算拦截了请求参数并修改它,只要模拟不出MD5加密出来的值,服务器过滤器直接就会进行拦截。
校验过程:客户端通过http或者https请求服务器时,对其中的参数按约定的MD5加密方法生成一个token,服务器接收信息后按照同样的MD5加密方法生成一个值,然后对比客户端传过来的token进行对比,一致说明请求参数没有被修改。

3.版权验证
当一个视频或者音频创作出来的时候它的md5是唯一的,若以后有翻录等版本出来,即使画质,声音,文件名都一样,但是他们的md5验证是不一样的,所以可以验证版权。
还比如用某一账户下载的视频它的账户信息也会和视频一起md5操作,如果以后这个人私自传播通过md5就可以去数据库中查找泄露版权的情况。

4.文件上传
文件上传时会上传文件的信息,此时将文件的md5上传,服务器中存储这个md5值,并存储这个md5值所对应的已上传字节长度,比如未上传对应为0,已上传对应为-1,已上传200字节就对应200,这个上传的时候可以匹配到这个文件在服务器中的状态,方便做断点续传,只要源文件没有更改,即使换个名字,换个账户都可以在服务器找到对应的文件,所以当服务器中有已经上传完毕的此文件时,别人再上传这个文件就可以实现秒传。

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
在python3的标准库中,已经移除了md5模块,而关于hash加密算法都放在hashlib这个标准库中,如SHA1、SHA224、SHA256、SHA384、SHA512和MD5算法等。
具体代码实现:

import hashlib
import timeencode = 'utf-8'                        # 编码
appkey = 'md5test.'                     # 待加密信息time_span = str(int(time.time()))
o_token = appkey                            # 可以对o_token进行处理appkey+time_span
hl = hashlib.md5()                          # 创建md5对象
hl.update(o_token.encode(encoding=encode))  # 转换为bytes
token = hl.hexdigest().upper()              # hexdigest() 加密过程
print('第一种MD5加密后为 :' + token)# 另一种写法:b前缀代表的就是bytes
str_md5 = hashlib.md5(b'md5test.').hexdigest().upper()
print('第二种MD5加密后为 :' + str_md5)

【Python】hashlib模块实现MD5加密相关推荐

  1. hashlib模块,md5加密

    import hashlib #字符串加密 # s = '12345'+'352627d' #后面的是加盐,只有自己知道 # # m = hashlib.md5(s.encode())#s.encod ...

  2. 递归、os.walk、内置函数、lambda、hashlib模块、md5加密、python安装第三方模块、操作mysql数据库...

    #递归就是函数自己调自己,一般递归都会有在什么情况下结束递归,一业可以有结束条件#递归最多死循环999次,递归不能设定次数# count=0# def abc():# global count# co ...

  3. Python——hashlib模块(MD5校验)

    摘要 主要是在python中使用MD5对下载后的文件是否完整进行校验. hashlib的基本概念 hash是一种算法,不同hash算法只是复杂度不一样.在python 3.x里代替了md5模块和sha ...

  4. Python hashlib模块中的sha加密

    Python hashlib模块中的sha加密 一.sha简介 sha (Secure Hash Algorithm)模块与md5的作用相似,用于对信息进行加密. "Secure Hash ...

  5. python hashlib模块_python3 hashlib模块

    Python3 hashlib模块和hmac 模块(加密) hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha ...

  6. 使用crypto模块实现md5加密功能(解决中文加密前后端不一致的问题)

    使用crypto模块实现md5加密功能(解决中文加密前后端不一致的问题) 参考文章: (1)使用crypto模块实现md5加密功能(解决中文加密前后端不一致的问题) (2)https://www.cn ...

  7. 使用python hashlib模块给明文字符串加密,以及如何撞库破解密码

    文章目录: 1 hashlib介绍 2 hashlib模块使用 2.1 查看hashlib中有哪些hash算法 2.2 对字符串进行加密 2.3 对于数据比较大,加密可以分块,结果一样 2.4 has ...

  8. python hashlib_python hashlib模块及md5() 、sha()

    hashlib模块是python2.5 以后出现的一个包,其主要涉及安全和加密.而且hashlib 得到openssl 的"支持" ,其支持openssl 库提供的所有算法,具体包 ...

  9. python hashlib模块安装_python hashlib 模块

    hashlib模块用于加密相关的操作,代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法. 在python3中已经废弃了md5和sha模 ...

最新文章

  1. Linux下安装搜狗拼音
  2. Delphi中的指针类型
  3. 移动端0.5px的实现
  4. 面向对象三大特性: 封装,继承,多态
  5. 论文排版怕翻车?这个排版神器赶紧用起来!
  6. 解决解决鼠标右键被锁定
  7. 2.9 穆尔彭罗斯伪逆
  8. Unity 3D 正交相机(Orthographic)
  9. ZOJ 1076 Gene Assembly
  10. linux设置usb选择性暂停,usb大容量存储设备是什么?无法启动怎么解决?
  11. 实战小例子 | Python实现用手势控制电脑音量
  12. 缓存问题(二) 布隆过滤器(Bloom Filter) 介绍和原理
  13. 液晶LCD广告机是什么,主要用途有哪些。广告一体机的种类有哪些。
  14. 周纪四 赧王中十八年(甲子、前297)——摘要
  15. “富不过三代”怎么表达?
  16. 隔离式DC/DC高压模块5V12V24V转50V110V250V300V380V600V1100V短路保护直流升压可调开关控制电源模块
  17. 乒乓球拍板和皮子世界排名
  18. TCP/IP之大明邮差
  19. 掺铬钛酸锶Cr:SrTiO3晶体基片|NaCl<111>10x10x2.0mm1sp晶体基片|Al2O3蓝宝石晶体基片|齐岳生物
  20. JS小游戏_能坚持几秒

热门文章

  1. ES6 Symbol 数据类型
  2. linux 文件读取 监控,linux 文件系统的监控
  3. 使用c++查看linux服务器某个进程正在使用的内存_精选20个常用的Linux命令
  4. Java 写时复制容器 —— CopyOnWriteArrayList
  5. (lucas) Saving Beans
  6. c向文件中插入数据_如何把数据写入顺序文件中,VBA代码中Write#语句的利用
  7. linux系统ip占用,IP地址被占用的问题,折腾我好几天了 (已解决)
  8. 0018计算机基础知识,0018 0019计算机应用基础上机试题
  9. mysql 及时点还原_mysqlbinglog基于即时点还原
  10. java 调用groovy_Java调用Groovy脚本