hashlib-sha摘要算法模块
摘要:hashlib:
摘要算法的模块
用处:
1、查看某两个文件是否完全一致
"abcdefggg"
"abcdefhhg"
2、加密认证
把密码加密后写入文件
(发生任何变化 都不行)
模块:
1、md5
2、sha sha256 sha512 等等
简单示例:
import hashlib #导入模块 obj = hashlib.md5('字符串') #创建md5类的对象 (加盐:静态和动态) obj.update(b"对比内容,或 加密内容") #传入数据 bytes 类型 bytes() a = obj.hexdigest() #对比的结果 print(a) #打印,写入文件 等等操作
校验两个字符串是否一致:
import hashlib md5_obj1 = hashlib.md5() md5_obj1.update(b'How are you?') #b"" 转换成bytes 类型 a = md5_obj1.hexdigest() #hexdigest 找摘要算法要结果 print(a) #04e35eb3e4fcb8b395191053c359ca0e md5_obj2 = hashlib.md5() md5_obj2.update(b'How are') #两个字符串不一样 b = md5_obj2.hexdigest() print(b) #打印摘要算法 的结果 # 699f3620f6b19226ec27865572f7b704 print(a == b) #md5 也不一样 #False #文章校对(是否完全一致),密码校验 等等
一篇文章的校验:
md5_obj.update()
支持多行,校验文件的时候,分别读取2个文件,一行一行读,每一行update一下
对比最终的hexdigest()
import hashlib md5_obj1 = hashlib.md5() md5_obj2 = hashlib.md5() with open('name','r',encoding='utf-8') as f,\ open('文件','r',encoding='utf-8') as f1: for line in f: md5_obj1.update(bytes(line,encoding='utf-8')) for line1 in f1: md5_obj2.update(bytes(line1,encoding='utf-8')) #update() 累加 a = md5_obj1.hexdigest() b = md5_obj2.hexdigest() print(a == b) # 对比最终的 hexdigest() #True 或 False
或
import hashlib md5_obj1 = hashlib.md5() md5_obj2 = hashlib.md5() with open('name','rb') as f,\ #直接用 "rb" 模式打开 , 不用 encoding='utf-8' 编码 open('文件','rb') as f1: for line in f: md5_obj1.update(bytes(line)) for line1 in f1: md5_obj2.update(bytes(line1)) a = md5_obj1.hexdigest() b = md5_obj2.hexdigest() print(a == b)
密码加密:
import hashlib md5_obj = hashlib.md5() md5_obj.update(b'123456789') # 密码 a = md5_obj.hexdigest() print(type(a)) with open('name','w') as f: # f.write(bytes(a,encoding='utf-8')) #'wb' 模式打开 , 要转成 bytes类型 f.write(a)
如果只是简单的加密,可以暴力破解:撞库
http://www.cmd5.com/ 一个在线md5 破解网站
撞库: 暴力破解密码
加盐: 为客户加字符串(有的客户密码太简单,主动弄复杂)
分为静态加盐和动态加盐
静态加盐:
import hashlib md5_obj = hashlib.md5('fdfdf@#$'.encode('utf-8')) # 给下面的密码加上一些字符串 md5_obj.update(b'123456789') # 密码 a = md5_obj.hexdigest() print(a) e8d298f03f7b6b0ce169ba30729a19e5
动态加盐:
md5_obj = hashlib.md5('用户名 + @#@df +密码'.encode('utf-8'))
sha:
也是个算法
sha 和 hsshlib 一样
sha:
1.sha
2.sha256
3.sha512
4.....
256,512,字节数越多, 运行速度越慢,,安全性更高
小结:
1、摘要的过程不可逆
2、能做的事:
文件的一致性检测
用户的加密认证:
单纯的md5不够安全
静态加盐: 简单的盐可能被破解,且破解之后所有的盐都失效了
动态加盐:动态的