一、hashilb 模块
1、算法介绍
python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
摘要算法就是通过 摘要函数f() 对 任意长度的数据data 计算出 固定的长度的摘要digest,目的是为了发现原始数据是否被人被人篡改过。
摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算(data)很容易,但通过digest发推data确非常难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。
常见的摘要算法MD5为例,计算出一个字符串的MD5值:
import hashlib md5 = hashlib.md5() #实例化一个MD5摘要算法对象 #能够让一个字符串 唯一的 对应 一个固定的值 md5.update('alex3714'.encode('utf-8')) #使用MD5算法的对象来操作字符串 #获取算法结果 ret = md5.hexdigest() #获取算法的结果hexdigest 16进制消化 print(ret,type(ret),len(ret))
#校验步骤
#注册:alex3714 -摘要->文件
#登录 alex3714-摘要,和文件里面字符串对比,
如果数据量很大,如检验文件的一致性,好几百G可以分批量摘要,可以分块多次调用update(),最后计算的结果是一样的:
md5 = hashlib.md5() md5.update('alex'.encode('utf-8')) md5.update('3714'.encode('utf-8')) ret = md5.hexdigest() print(ret)
撞库概念 MD5:
#别人有一个庞大的库:字符串-->md5值的关系 #加盐办法解决 md5obj = hashlib.md5('erxiao'.encode('utf8')) #实例化一个MD5算法的对象,加盐 xiao ret = md5obj.hexdigest() print(ret)
动态加盐:
#动态加盐 # 常用到到userinfo表存密码时候 username = 'alex' md5obj = hashlib.md5(username.encode('utf-8')) #实例化一个MD5摘要算法的对象,加盐 md5obj.update('alex3714'.encode('utf-8')) # 使用md5算法的对象来操作字符串 ret = md5obj.hexdigest() # 获取算法的结果 hex+digest 16进制+消化 print(ret) #ee838c58e5bb3c9e687065edd0ec454f
MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似:
SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度更长。
ret = md5.hexdigest() #获取算法的结果hexdigest 16进制消化 print(ret,type(ret),len(ret))