import hashlib
m=hashlib .md5()#用hashlib.md5()加密,没办法反解,除非是撞密码,也只能是弱密码
m.update(b'I am here')
print(m.hexdigest() )#以十六进制的形式输出
m.update(b"It's a long time since we spoken" )
print(m.hexdigest() )
'''
a63b492f3e1038b1f26a385acb6111cf
382442316d213a2874de7ed253b89113
多次update是把内容合并加密后再输出
'''
print('--------------------->1')
m2=hashlib .sha512()
m2.update(b"It's a long time since we spoken")
print(m2.hexdigest() )
#1173c2474b3918e220b150de6da87bc209d290dfda96508369a3e49c7d2da8c88aff4d24542f8719703818ef233ce1639b7af06b0ef508d94efeaa49b83eb76a
print('--------------------->2')
m3=hashlib .sha1()
m3.update(b"It's a long time since we spoken")
print(m3.hexdigest() )
#059c0c5a99fb11673ff5e8fdb3b1161ea19715e1
#可见,sha512比sha1加密的复杂程度要更高,更安全
print('---------------->3')
m=hashlib .md5()#用hashlib.md5()加密,没办法反解,除非是撞密码,也只能是弱密码
m.update('天王盖地虎'.encode(encoding= 'utf-8') )
print(m.hexdigest() )#以十六进制的形式输出
m.update(b'123456')#update()只能传一个参数,不能传两个
print(m.hexdigest())
print('------------------->4')
import hmac
h = hmac.new(b'a','天王盖地虎,宝塔镇河妖'.encode(encoding= 'utf-8'),hashlib.sha256)
h.update(b'nco')
h.update('地虎,宝塔镇'.encode('utf-8') )
print( h.hexdigest())
h2 = hmac.new(b'a','天王盖地虎,宝塔镇河妖nco地虎,宝塔镇'.encode(encoding= 'utf-8'),hashlib.sha256)
print(h2.hexdigest())
'''
de86c4b11e3e7403da482290c402d8f73fdeee9a9acf51eda35438972d72975d
de86c4b11e3e7403da482290c402d8f73fdeee9a9acf51eda35438972d72975d
可见在相key的情况下,update()是把内容拼接
#hmac.new(密钥,要加密的信息,hashlib.sha256) 注意:hashlib.sha256后面不用加括号,否则会报错
在python3.8版本中,刚开始没有加hashlib.sha256系统一直在报错
hmac算法是加密的hash算法,它需要一个hash算法(比如sha256获取md5等)和一个密匙key,
在hash计算的过程中将密匙key混入,产生一个和原来hash算法相同位数的hash值。
在大多数情况下,我们甚至可以将hamc算法看做是加盐的hash算法(加盐是将一个随机字符串放在需要加密
的密文前面或者后面,然后对这个拼接后的密文进行加密得到hash值)。
但它们的加密原理肯定不一样,虽然达到的效果是一样的,都是对密文混入一个第三方值,然后得到一个hash值
decode('utf-8'):将utf-8编码的字符zhidao转换成成unicode编码字符
encode('gbk'):将unicode编码的字符转换成gbk编码字符。
从utf-8转换成gbk为什么需要unicode作中间桥梁呢。因为内在python中,字符内部表示是unicode码。
所以编码转换通容常以unicode作为中间编码。
'''