python之hashlib模块

算法(Algorithm)是在有限步骤内求解某一问题所使用的一组定义明确的规则。可以说,算法就是计算机解题的过程。

算法具有五个重要特征:

  1.有穷性:步骤有限

  2.明确性:算法每一步必须有明确的意义

  3.输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是算法本身定的初始条件

  4.输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。

  5.可行性:算法原则上是可以精确运行的

hash是一种算法,算法就像是一座工厂,接受传入的内容(输入),经过加工处理(运算)得到加工处理后的产品(一串hasn值)。

hash算法的特点:

  1.只要传入的内容一样,经过运算后的得到 的hash值必然是 一样的;=====》完整性验证

  2.hash值是不能反解的;=======》把密码做成hash值,不以明文的形式传输/存储

  3.只要hash算法不变,无论明文的内容有多大多小,hash值的长度是一样的。===》不影响网络传输

import hashlib
#常规用法一
# m=hashlib.md5('helloworld'.encode('utf-8'))
# print(m.hexdigest())
#fc5e038d38a57032085441e7fe7010b0

#常规用法二
# m=hashlib.md5()
# m.update('hello'.encode('utf-8'))
# m.update('world'.encode('utf-8'))
# print(m.hexdigest())
#fc5e038d38a57032085441e7fe7010b0

# m=hashlib.md5()
# m.update('helloworld'.encode('utf-8'))
# print(m.hexdigest())
#fc5e038d38a57032085441e7fe7010b0

# m=hashlib.md5()
# m.update('hello world'.encode('utf-8'))
# print(m.hexdigest())
#5eb63bbbe01eeed093cb22bb8f5acdc3

'''
从以上的练习中可以看出,同样的内容得到的hash值是一样的,
稍微有点改动,甚至加一个空格都会得到不同的hash结果
'''

 

加盐

import hashlib
m=hashlib.md5()
m.update('天王盖地虎'.encode('utf-8'))
m.update('密码。。。'.encode('utf-8'))
m.update('小鸡炖蘑菇'.encode('utf-8'))
print(m.hexdigest())
#6e7122afda007b679dfb7759f9122783

  

hmac模块

import hmac
h=hmac.new('天王盖地虎'.encode('utf-8'))
h.update('密码。。。'.encode('utf-8'))
print(h.hexdigest())
#e76a9abfcec64c6594384c14dbbd8f82

  

原文地址:https://www.cnblogs.com/qiaoqianshitou/p/8783402.html