hashlib模块
import hashlib
一堆加密算法的集合体,哈希算法的加密方式不止一种
哈希算法也叫摘要算法,相同的数据始终得到相同的输出,不同的数据得到不同的输出。
- 哈希将不可变的任意长度的数据,变成具有固定长度的唯一值
- 字典的键和集合的值是通过哈希计算存储的,存储的数据是散列(无序)
加密破解的网站
撞库
撞库是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。
哈希的应用
场景: 网站密码加密
hashlib模块的加密原则是单向不可逆的
举例 md5算法 : 可以把字符串变成具有固定长度的32位十六进制字符串
加盐
固定的在密码前面加一串字母或数字进行加密 === > 加key
基本语法
md5对象
import hashlib
import random
# 1.创建md5对象
hs = hashlib.md5()
# 2.把要加密的数据更新到对象中 [update => 把字节流更新到对象之后,进行加密]
hs.update("111222".encode("utf-8"))
# 3.获取十六进制的字符串
res = hs.hexdigest()
print(res, len(res)) # 00b7691d86d96aebd21dd9e138f90840 32
# 加盐 (加key , 加一个关键字)
hs = hashlib.md5("XBOYww_".encode())
hs.update("111222".encode())
res = hs.hexdigest()
print(res) # 623e0e8d4ecabd638c36a5e40189ba8f
res = str(random.randrange(100000,1000000))
hs = hashlib.md5(res.encode()) # 参数需要时一个字符串
hs.update("111222".encode())
res = hs.hexdigest()
print(res)
sha系列
hs = hashlib.sha1() # 结果是具有固定长度40位的十六进制字符串;
hs.update("sha系列算法".encode())
# hs = hashlib.sha512("XGIRLww_".encode()) 加盐
res = hs.hexdigest()
print(res , len(res))
"""20c2502d0e00bf8fe35ebfbf097049d1f070e7968f30ef3353ff33d311af50da6b3883bfb9ab411f9dc4cdcd2310b39f5815c6dc1c48cd138d07443a6bcdcd11 128"""
hmac加密算法
import hmac
import os
key = b"xdogaa_"
msg = b"112233"
# new(盐(字节流),密码(字节流) ) 加盐
hm = hmac.new(key,msg)
res = hm.hexdigest()
"""
eebe14b1c144092121236cb1e3da396a
"""
print(res , len(res))
# 动态加盐
"""
uradom的使用方法
os.urandom(位数) 返回随机的二进制字节流
res = os.urandom(10)
print(res , len(res))
"""
key = os.urandom(64)
msg = b"112233"
hm = hmac.new(key,msg)
res = hm.hexdigest()
print(res , len(res))
标签:hashlib,key,res,encode,模块,hs,print
From: https://www.cnblogs.com/wbcde116/p/18085752