hashlib模块
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
# hash 哈希算法 可hash数据类型——>数字的过程
# hashlib —— 摘要算法
# 也是一些算法的集合,有好多算法
# 字符串 --> 数字
# 不同的字符串 --> 数字一定不同
# 无论在哪台机器上,在什么时候计算,对相同的字符串结果总是一样的
# 摘要过程不可逆
# 用法
# 文件的一致性校验
# 密文验证的时候加密
# 密文验证的时候加密
# md5算法 通用的算法
# sha算法 安全系数更高,sha算法有很多种,后面的数字越大安全系数越高,
# 得到的数字结果越长,计算的时间越长
我的总结:关于密文校验.
将字符串转换为bytes类型用lib模块方法(算法md5,sha算法)将密码进行加密,变成固定长度的类似于hash值的一种数字,好处是经过加密的密文,在经过加盐,动态加盐.就不容易让密码牢固,不可破解.
import hashlib
#记住他只能以bytes类型转换为数字,即使加盐或者动态加盐也只能是bytes类型.
m = hashlib.md5()
m.update('alex3714'.encode('utf-8'))##记住update是需要一个对象的
print(m.hexdigest()) #aee949757a2e698417463d47acac93df
将字符串转换成数字之后,这种算法是不可逆的,
加盐(就是再加一次密)
m = hashlib.md5('哈哈哈'.encode('utf-8'))
m.update('123456'.encode('utf-8'))
content = m.hexdigest()
print(content) #617a9b009da0d016c21cc1348a209e5f
动态加盐,将用户名信息加进去,作为盐,因为用户名相同的几率是非常小的,所以就这样添加进去.用户名改变那么动态的盐,会随著改变.
import hashlib
username = '小猪佩奇'
m = hashlib.md5(username[:2].encode('utf-8'))
m.update(username.encode('utf-8'))
print(m.hexdigest()) #32df25c933d596eb4ce44cdcf331631f
关于文件校验:
一段字符串直接进行摘要和分成几段进行摘要的结果是相同的.
#这就是校验文件一致性的例子
def check(filename):
m = hashlib.md5() #比较文件的一致性就不存在加密
with open(filename,'rb')as f:
while True:
content = f.read(4096) #文件不能一下全部读出来.且假如是视频文件没有行的概念,而如果是文件信息的话,
if content: # 读出来的一段字符串直接进行摘要和分成几段进行摘要的结果是相同的.
#所以就按照字节去读,比如1024,4096等(对即使来讲全是字节,二进制0101)
m.update(content) #记住update是需要一个对象的
else:
break
return m.hexdigest()
#先让文件一直循环,如果content有内容,就update,否则就(说明读完了)break
ret1 = check('file1')
ret2 =check('file2')
print(ret1) #4920a7b012186a2e58208b739dcf95bb
print(ret2) #4920a7b012186a2e58208b739dcf95bb