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. bhp 阅读笔记 OSX 下 setuptools pip 安装

    安装 python-setuptools python-pip 尝试 brew install python-setuptools 失败 brew update 失败 $ cd `brew --pre ...

  2. 编写一致的符合习惯的javascript

    本文转自我司的编码规范~ ==== 引言 将要叙述的这些原则旨对javascript开发的风格做指导,并非指定性的规则需绝对服从.如果需要找出一条必须遵循的原则,应该是保持代码的一致性和风格统一. 除 ...

  3. MySQL远程登陆解决

    第一句:以权限用户root登录 第二句:选择mysql库 第三句:查看mysql库中的user表的host值(即可进行连接访问的主机/IP名称) 第四句:修改host值(以通配符%的内容增加主机/IP ...

  4. badboy录制网站出现css样式混乱,网页的图标点击没反应

    本人在测试web工作过程中,遇到了标题一样的问题.苦恼很久也没有找到原因.后面自己摸索,发现了问题所在! badboy安装是2.2.5版本:ie最新版本: 原因:首次安装badboy的时候,所默认的浏 ...

  5. jsp页面,jstl标签中的数据在<%%>java中使用

    可参考jsp的API隐式对象.. 这部分数据其实被保存在page域中,但jsp中如果使用java代码需要在特定的标签中<%%>,在这个标签中可使用的只有pageContext对象,所以可以 ...

  6. POJ 2370

    //我的解题思路是先把输入的含有n个元素的数组a排序(从小到大),然后对前(n+1)/2个元素作如下的处理, //s+= (a[i]+1)/2 #include <iostream> #i ...

  7. zabbix 自定义 key (转)

    转自:http://www.cnblogs.com/miclesvic/p/6164303.html 1.在zabbix_agent端zabbix_agentd.conf配置文件中增加自定义Key(/ ...

  8. mysql 执行 sql 语句提示Parameter '@XXX' must be defined

    执行 sql 语句 MySqlException: Parameter '@maxNo' must be defined. 执行 sql 中含有自定义变量 @maxNo,抛出异常 解决方法: 连接字符 ...

  9. Storm实现单词统计代码

    import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.HashM ...

  10. Linux的文件的打包(tar方法)

    Linux的文件的打包(tar方法) tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一 ...