#!/usr/bin/env python
# -*- coding:utf-8 -*-
import hashlib
#用于加密相关的操作,python 3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
#################################################### md5 #####################################################
# md5 字符串只可以单向加密成密文,不能反解。(可通过撞库进行解密)
# 如果用于登录密码验证,则可以将密码转换为密文进行比对验证即可
obj = hashlib.md5() #调用md5消息摘要算法
obj.update('test message'.encode('utf-8')) #对指定的算法进行加密,加密长度为32位的字节形式
print(obj.hexdigest()) # c72b9698fa1927e1dd12d3cf26ed84b2 每个字符串都有唯一值
obj.update('try'.encode('utf-8')) #3a2430952b0188616a70607cce878631 ==> 等价于对'test messagetry'加密
print(obj.hexdigest())
#所以可以通过给用户定义的字符串‘加盐’key来增加密文的复杂度
obj1 = hashlib.md5('password'.encode('utf-8')) #调用md5消息摘要算法,并在该处指定用其他字符串来辅助加密 ‘加盐’
obj1.update('test message'.encode('utf-8'))
print(obj1.hexdigest()) # c13bbb52245a85ec55bedfb309a4bfb1
#以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密
import hashlib
######################################################## 256 ########################################################
hash = hashlib.sha256('898oaFs09f'.encode('utf8'))
hash.update('alvin'.encode('utf8'))
print (hash.hexdigest())#e79e68f070cdedcfe63eaf1a2e92c83b4cfb1b5c6bc452d214c1b7e77cdfd1c7
#python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 再进行处理然后再加密
import hmac
h = hmac.new('alvin'.encode('utf8'))
h.update('hello'.encode('utf8'))
print (h.hexdigest())#320df9832eab4c038b6c1d7ed73a5940