py---------常用模块2

一、hashilb 模块

1、算法介绍

pythonhashlib提供了常见的摘要算法,如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))

猜你喜欢

转载自www.cnblogs.com/edeny/p/9066196.html