一以贯之

模块: hashlib

hash          哈希算法 可hash数据类型——>数字的过程
hashlib  —— 摘要算法
        # 也是一些算法的集合,有好多算法
        # 字符串 --> 数字
        # 不同的字符串 -->  数字一定不同
        # 无论在哪台机器上,在什么时候计算,对相同的字符串结果总是一样的
        # 摘要过程不可逆
 
用法
# 文件的一致性校验
# 密文验证的时候加密
# 密文验证的时候加密
 
 
 
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等
 
什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。
摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。
而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

 

 
密文验证的时候加密
 
import hashlib
# md5算法 通用的算法
# sha算法 安全系数更高,sha算法有很多种,后面的数字越大安全系数越高,
        # 得到的数字结果越长,计算的时间越长

 

import hashlib
m = hashlib.md5()
m.update('haha'.encode('utf-8'))
print(m.hexdigest())



md5 = hashlib.md5()
md5.update('how to use md5 in python hashlib?')
print md5.hexdigest()

计算结果如下:
d26a53750bc40b38b65a520292f69306

# 将所有常见的密码  md5摘要
# 密码 摘要结果
# 暴力破解 和 撞库

 

如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的:

 

md5 = hashlib.md5()
md5.update('how to use md5 in ')
md5.update('python hashlib?')
print md5.hexdigest()
 
MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似:
import hashlib
sha1 = hashlib.sha1()
sha1.update('how to use sha1 in ')
sha1.update('python hashlib?')
print sha1.hexdigest()

 

加盐
 
 
import hashlib
m = hashlib.md5('yan'.encode('utf-8'))
m.update('123456'.encode('utf-8'))
print(m.hexdigest())  #c629497ab255cb1a56e9df3f78418944

 

 
动态加盐
 
import hashlib
username = 'king'
m = hashlib.md5(username[:2:2].encode('utf-8'))
m.update('123456'.encode('utf-8'))
print(m.hexdigest())  #1dcd3c1ad23a29302e4346ade2b1da75

 

一段字符串直接进行摘要和分成几段摘要的结果是相同的
 
如果数据太大可以根据大小进行效验
 
 
 
posted on 2019-04-24 19:05  凡夫or俗子  阅读(82)  评论(0)    收藏  举报