9.8 hashlib模块
目录
9.8 hashlib模块
- 思考:为什么要有hashlib模块?hashlib模块有什么用?
(1)对字符加密,其实是一个自定义的字符编码表。
(2)原来0和1转换成字符,而现在的是字符转成另一种字符。
(3)应用场景:在某平台用户输入账号密码,账号密码需要传输给平台,以防账号密码被拦截,则需要对账号密码串进行加密。
1.hashlib.md5()
用的多,相比较更难破解
import hashlib
m=hashlib.md5()
# pwd=b'helloworld'
pwd='helloworld'.encode('utf-8') #在哈希之前变为二进制形式
m.update(pwd)
print(m.hexdigest())
#输出
fc5e038d38a57032085441e7fe7010b0
(1)特性1:长度一样
'helloworld' fc5e038d38a57032085441e7fe7010b0
'123' 202cb962ac59075b964b07152d234b70
(2)特性2: hash加密的字符串一样,则哈希结果一样
'helloworld' fc5e038d38a57032085441e7fe7010b0
(3)特性3:如果使用同一个哈希字符编码表,不断的哈希结果会累加。
import hashlib
m=hashlib.md5()
pwd=b'123'
# pwd='helloworld'.encode('utf-8') #在哈希之前变为二进制形式
m.update(pwd)
print(m.hexdigest())
#输出
#'123' 202cb962ac59075b964b07152d234b70
m.update(b'123456')
print(m.hexdigest())
#输出
#'123456' 1e191d851b3b49a248f4ea62f6b06410
m=hashlib.md5()
m.update(b'123123456')
print(m.hexdigest())
#输出
#'123123456' 1e191d851b3b49a248f4ea62f6b06410
总结
- hash加密之后长度一样
- hash加密的东西一样则哈希结果一样
- 如果使用同一个哈希字符编码表,不断的哈希结果会累加。
(4)小练习
#假如我们知道hash的某账号会设置这几个密码
import hashlib
pwd_list=[
'hash3714',
'hash1313',
'hash94139413',
'hash123456',
'123456hash',
'h123ash'
]
#hash值要拿到,容易获取,获取某一个人的很简单,获取某个数据库很难。
def break_pwd(hash_pwd):
for pwd in pwd_list:
m=hashlib.md5() #在外面生成就会进行累加,只有一个hash值,所以在内部生称
m.update(pwd.encode('utf-8'))
if m.hexdigest()==hash_pwd:
return pwd
if __name__=='__main__':
hash_pwd='0562b36c3c5a3925dbe3c4d32a4f2ba2'
pwd=break_pwd(hash_pwd)
print(f'密码是{pwd}')
#输出
密码是hash123456
2. hmac.new()
安全性更强
import hmac,hashlib
m=hmac.new(b'123',digestmod=hashlib.md5) #加盐处理 '123'固定在服务器,可以隔段时间就改变,提高安全性
m.update(b'123')
print(m.hexdigest())
#输出
#b2a1ec0f3e0607099d7f39791c04e9a4
m.update(b'456')
print(m.hexdigest())
#输出
#a31dce88633f3393f6c475525ff48301
m=hmac.new(b'123',digestmod=hashlib.md5)
m.update(b'123456')
print(m.hexdigest())
#输出
#a31dce88633f3393f6c475525ff48301
b2a1ec0f3e0607099d7f39791c04e9a4
a31dce88633f3393f6c475525ff48301
a31dce88633f3393f6c475525ff48301
也具有hash的三个特性。
3.uuid模块补充
import uuid
for i in range(10):
print(uuid.uuid4()) #按照时间生成的字符串,永不重复。
浙公网安备 33010602011771号