Python加密的几种方式 md5, sha1, base64

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
展开阅读全文

没有更多推荐了,返回首页