1、 md5 加密 生成32位的数字字母组合
import hashlib
md5 = hashlib.md5()
md5.update("how to use md5 in python hashlib?".encode("utf-8")) # 注意: 这里面是一个 Unicode-objects
print(md5.hexdigest())
print(type(md5.hexdigest())) # <class 'str'>
# 输出结果: d26a53750bc40b38b65a520292f69306
如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的:
md6 = hashlib.md5()
md6.update('how to use md5 in '.encode('utf-8'))
md6.update('python hashlib?'.encode('utf-8'))
print(md6.hexdigest())
# 输出结果: d26a53750bc40b38b65a520292f69306 注意数据要一模一样才会相等,多一个空格都不行
可以简写 hashlib.md5(str.encode(‘utf-8’)).hexdigest() 直接写在 md5()函数里面,不用再update
str_md5 = hashlib.md5("http://jobbole.com".encode('utf-8')).hexdigest()
print(str_md5)
def get_md5(url):
""" 包装成一个函数 """
m = hashlib.md5()
m.update(url)
return m.hexdigest()
print(get_md5("http://jobbole.com".encode("utf-8")))
2、 sha1 加密
这个 sha1加密的方式 和 md5加密的方式是一样的, 得到的数据长度是 40 md5的是 32 base64编码的是以 = 结尾
import hashlib
sha1 = hashlib.sha1()
sha1.update('how to use sha1 in '.encode('utf-8'))
sha1.update('python hashlib?'.encode('utf-8'))
print(sha1.hexdigest())
print(type(sha1.hexdigest()))
# 输出结果: 2c76b57293ce30acef38d98f6046927161b46a44 40个长度
# <class 'str'>
3、使用hmac实现带key的哈希。
# 在计算哈希的时候,不能仅针对原始输入计算,需要增加一个salt来使得相同的输入也能得到不同的哈希 加盐值,防止黑客攻击
import hmac
# 原始消息message,随机key,哈希算法,这里采用MD5
message = b'Hello, world!'
key = b'secret'
h = hmac.new(key, message, digestmod='MD5')
# 如果消息很长,可以多次调用h.update(msg)
print(h.hexdigest())
# 'fa4ee7d173f2d97ee79022d1a7355bcf'
print(hashlib.md5("Hello, world!".encode("utf-8")).hexdigest())
# 6cd3556deb0da54bca060b4c39479839