Python——hashlib模块

hashlib 模块

hash是一个种算法,是将一个任意长的数据,根据计算得到一个固定长度的特征码

  • 特征
    • 不同输入 可能会有相同的结果 几率特别小
    • 相同的输入 肯定得到一个相同的结果
    • 散列值的性质,从原理上来说是不可能反解的
    • 网上有反解的一些小工具,但是使用的方式是撞库,就是他们讲一些经常出现的数据存放起来,然后进行一一比对
  • 使用场景
    • 密码验证
    • 验证数据是否被篡改,例如游戏安装包

Case

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import hashlib
m = hashlib.md5('aaa123'.encode('utf-8'))
print(m.hexdigest())
print(len(m.hexdigest()))
# d9f6e636e369552839e7bb8057aeb8da
# 32

h1 = hashlib.sha512('123'.encode('uft-8')) # hashlib.有很多不同的算法
print(len(h1.hexdigest()))
print(h1.hexdigest())
# 128
# 3c9909afec25354d551dae21590bb26e38d53f2173b8d3dc3eee4c047e7ab1c1eb8b85103e3be7ba613b31bb5c9c36214dc9f14a42fd7a2fdb84856bca5c44c2

# 加盐
m = hashlib.md5('321'.encode('utf-8'))
print(m.hexdigest())
# caf1a3dfb505ffed0d024130f58c5cfa
m.update('qweqr'.encode('utf-8'))
print(m.hexdigest())
# 60025d5161811b25a25c0c333df98634

# 先加盐
import hmac
h = hmac.new('qweqr'.encode('utf-8'))
h.update('321'.encode('utf-8'))
print(h.hexdigest())

# 393faee81f2f2db9bd3efa6d5302792e