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. 图片后门恶意捆绑工具FackImageexploer

    本文作者:夜莺 今天向大家提个醒,最近有一款工具名叫FackImageexploer,该工具能够将恶意的.bat和.exe程序与图片绑定在一起,假若受害者点击了图片,就会反弹个shell给不法分子,如 ...

  2. RabbitMQ交换机规则实例

    RabbitMQ Exchange分发消息时根据类型的不同分发策略有区别,目前共四种类型:direct.fanout.topic.headers .headers 匹配 AMQP 消息的 header ...

  3. Flask从入门到精通之重定向和用户会话

    最新版的hello.py 存在一个可用性问题.用户输入名字后提交表单,然后点击浏览器的刷新按钮,会看到一个莫名其妙的警告,要求在再次提交表单之前进行确认.之所以出现这种情况,是因为刷新页面时浏览器会重 ...

  4. elasticsearch5.x安装中一些问题的解决办法

    1.root超级用户不能正常启动 由于elasticsearch2.0版本以后不能使用root来启动,所以需要创建一个普通用户来启动. [root@bogon ~]# groupadd elastic ...

  5. (转)Python - 字符串对齐

    https://zhuanlan.zhihu.com/p/33923344-----------Python小知识:用format格式化输出字符串 版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  6. tensorflow基础篇-1

    1.使用占位符和变量 import tensorflow as tf import numpy as np #-----创建变量并初始化----------- def first(): my_var= ...

  7. Spring Security构建Rest服务-1202-Spring Security OAuth开发APP认证框架之重构3种登录方式

    SpringSecurityOAuth核心源码解析 蓝色表示接口,绿色表示类 1,TokenEndpoint 整个入口点,相当于一个controller,不同的授权模式获取token的地址都是 /oa ...

  8. 搭建互联网架构学习--006--duboo准备之zk集群部署安装

    dubbo集群部署安装依赖于zookeeper,所以先安装zookeeper集群. 1.准备三台机器做集群 2.配置 配置java环境  ,2,修改操作系统的/etc/hosts文件,添加IP与主机名 ...

  9. 【Java并发编程】:深入Java内存模型—内存操作规则总结

    主内存与工作内存 java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节.此处的变量主要是指共享变量,存在竞争问题的变量.Java内存模 ...

  10. C# 点击打开浏览器

    System.Diagnostics.Process.Start("网址");//默认浏览器打开网页System.Diagnostics.Process.Start(@" ...