Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等
它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)

对于同一个字符串,不管这个字符串有多长,只要是相同的,
无论在任何环境下,多少次执行,在任何语言中
使用相同的算法\相同的手段得到的结果永远是相同的
只要不是相同的字符串,得到的结果一定不同

md5算法,32位的字符串,每个字符都是一个十六进制
md5算法 效率快 算法相对简单   需要进行加盐操作

用法  :

1.先创建一个对象

2.对象.update('字符串'.encode=('utf-8'))

3.print(对象.hexdigest())

s1 = 'ben'  # 7fe4771c008a22eb763df47d19e2c6aa
s2 = 'abc123' # c203eb9f0cdbe64ec22e214b759b7ba3 md5_obj = hashlib.md5() # 1.先创建一个对象
md5_obj.update(s1.encode('utf-8')) # 2. update(对象.编码格式)
res = md5_obj.hexdigest() # 3. 给一个变量接收 对象.hexdigest()
print(res, len(res), type(res)) # 得到md5值 md5_obj.update(s2.encode('utf-8'))
res2 = md5_obj.hexdigest()
print(res2, len(res2), type(res2))

小小的输入生成md5的程序

def md5(name):
name_obj = hashlib.md5()
name_obj.update(name.encode('utf-8'))
ret = name_obj.hexdigest() return ret name = input('请输入你的名字>>>')
my_md5 = md5(name)
print(my_md5)

加盐

可能会撞库,所以必须进行加盐

def md5(name):
name_obj = hashlib.md5()
name_obj.update((name + name).encode('utf-8')) # 可以给想加密的东西再加上别的字符
ret = name_obj.hexdigest() return ret name = input('请输入你的名字>>>')
my_md5 = md5(name)
print(my_md5)

 动态加盐

username = input('username : ')
passwd = input('password : ')
md5obj = hashlib.md5(username.encode('utf-8'))
md5obj.update(passwd.encode('utf-8'))
print(md5obj.hexdigest())

文件的一致性校验 利用md5值是否相同来判断

md5_obj = hashlib.md5()
with open('5.序列化模块_shelve.py', 'rb') as f:
md5_obj.update(f.read())
ret1 = md5_obj.hexdigest() md5_obj = hashlib.md5()
with open('5.序列化模块_shelve.py.bak', 'rb') as f:
md5_obj.update(f.read())
ret2 = md5_obj.hexdigest()
print(ret1, ret2)

弱文件太大, 内存读不下, 可以:
按行读: 文本, 视频, 音乐, 图片, bytes
按字节读: 10240 = 1M

md5 = hashlib.md5()
md5.update('hello,world,wow'.encode('utf-8'))
ret = md5.hexdigest()
print(ret) # f733a03f0f1caac0b7ac905f25bf4fd2 md5 = hashlib.md5()
md5.update('hello,'.encode('utf-8'))
md5.update('world,'.encode('utf-8'))
md5.update('wow'.encode('utf-8'))
ret = md5.hexdigest()
print(ret)

大文件的已执行校验 

循环的读取文件内容

循环的来update

md5_obj = hashlib.md5()

with open('file', 'rb') as f:
md5_obj.update(f.read())
# 循环的读取文件内容
# 循环的来update
print(md5_obj.hexdigest())

sha1也是一个算法, 40位的字符串, 每个字符都是一个十六进制 算法相对复杂 计算速度也慢 用的人少,所以会比md5更安全一点 和md5用法一样

sha_obj = hashlib.sha1()
sha_obj.update(s1.encode('utf-8'))
res = sha_obj.hexdigest()
print(res, len(res), type(res))

小练习

# 写成一个函数
# 参数 : 文件1的路径,文件2的路径,默认参数 = 1024000
# 计算这两个文件的md5值
# 返回它们的一致性结果 T/F

hashlib模块 md5 sha1的更多相关文章

  1. 模拟ssh、黏包、hashlib模块(MD5)

    待补充..... 一.模拟ssh 二.黏包 1.黏包现象 让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd) res=subprocess.Popen(cm ...

  2. python hashlib模块 md5加密 sha256加密 sha1加密 sha512加密 sha384加密 MD5加盐

      python hashlib模块   hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, ...

  3. Python中hashlib模块

    介绍hashlib hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512. ...

  4. Python常用模块之hashlib模块

    1.hashilib模块的功能 python的hashlib提供了常见的摘要算法,如MD5, SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换成一 ...

  5. python笔记之hashlib模块

    涉及加密服务:14. Cryptographic Services其中 hashlib是涉及安全散列和消息摘要,提供多个不同的加密算法借口,如SHA1.SHA224.SHA256.SHA384.SHA ...

  6. 用python计算md5,sha1,crc32

    Linux下计算md5sum,sha1sum,crc: 命令 输出 $md5sum hello f19dd746bc6ab0f0155808c388be8ff0  hello $sha1sum hel ...

  7. python hashlib模块 logging模块 subprocess模块

    一 hashlib模块 import hashlib md5=hashlib.md5() #可以传参,加盐处理 print(md5) md5.update(b'alex') #update参数必须是b ...

  8. Python hashlib模块 (主要记录md5加密)

    python提供了一个进行hash加密的模块:hashlib 下面主要记录下其中的md5加密方式(sha1加密一样把MD5换成sha1) >>> import hashlib > ...

  9. Python3学习之路~5.12 hashlib & hmac & md5 & sha模块

    hashlib模块用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import md5 h ...

随机推荐

  1. [Python] 模拟登录网站(。。为了之后操作数据。。)

    我司的内部管理(Web)系统(日报)着实..(mafan).. 所以,就想自己动手增加一下便利性. 计划是, - 桌面程序 用来方便记录(按自己格式,数据随时保存到sqlite中,备用) 通过一览来确 ...

  2. day 47 Django 4的简单应用 创建简单的图书管理 (单表的增删改查)

    前情提要  Django  已经学了大半.. 很多东西已经能够使用在生产环境当中 一:模糊查询 二:单表删除 三:单表修改 四:图书管理 图书管理操作 视图结构 A:路由层 A :配置路由文件 参数解 ...

  3. EF 约定介绍

    当前环境为EF Code First开发模式中 一.EF默认约定 1.常用约定 (1).当没有显示指定实体主键的时候,EF会默认将长得最像Id的属性(且类型为GUID)设为主键 (2).设计实体时,当 ...

  4. jdbc调试sql语句方法

    在main命令行输入三个参数到oracle 的 dept2表(自己建的 和dept一样(deptno,dname,loc)),插入到数据库中去.通过本例子,学习在java里调试sql的方法. 写完sq ...

  5. Tomcat性能调优-让小猫飞奔

    一.总结前一天的学习 从“第三天”的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: ü   吞吐量 ü   Responsetime ü   Cpuload ü   MemoryUsa ...

  6. SSH 转发学习【转】

    本地端口转发 假定有三台主机A.B.C.由于种种原因(无论是防火墙还是路由原因),AC两台主机之间无法连通.但是B却可以和A.C连通.这时候就可以用本地端口转发来实现A和C通过B来连通. A 192. ...

  7. Fiddler Web Debugger的下载和安装(图文详解)

    不多说,直接上干货! Fiddler是一个http协议调试代理工具,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点.调试web应用.修改请求的数据 ...

  8. #define a int[10]与 typedef int a[10]用法

    // #define a int[10] #include <stdio.h> #include <stdlib.h> #define a int[10] int main() ...

  9. Catalina.createDigester方法详细理解

    这个方法主要设置(这个方法很重要,贵在理解,虽然还没学过设计模式..) 1.遇到<server>标签时创建StandardServer实例   设置StandardServer类内部的相关 ...

  10. antlr4 接触

    1. 配置IDE(可选) 2. 加减法示例 编写expr.g4 grammar AddMinus; expr: Minus Number #minusNum | expr op=('+'|'-') e ...