这个模块针对不同的安全哈希和消息摘要算法实现了一个通用的接口。该算法接收传入的内容,经过运算得到一串hash值
此模块中总是可用的哈希算法构造器有md5, sha1(), sha224(), sha256(), sha384(), sha512(), blake2b() 和 blake2s()。
hash值的特点
1、只要传入的内容一样,得到的hash值必然一样=========>>
文件传输完整性校验。
2、不能由hash值反解成内容==========>>
把密码做成hash值,不应该在网络传输明文密码。
3、只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的。
hashlib的使用
注:向 update() 输入字符串对象是不被支持的,因为哈希基于字节而非字符。
update()可多次传值,与一次update这段长数据,得到的结果一样,但是update多次为校验大文件提供了可能。
import hashlib
m = hashlib.md5()
m.update(b’abc’)
m.update(‘李白’.encode(‘utf-8’))
print(m.hexdigest())
ddfe8b4099dee5a307bd8d72b5408332
简要写法
print(hashlib.md5(‘abc李白’.encode()).hexdigest())
ddfe8b4099dee5a307bd8d72b5408332
撞库
撞库是通过已有的大量密码进行hash运算得到hash值,将截获到的密码秘文与已有的hash值进行比对。
‘’’
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
‘’’
import hashlib
已有密码
password_list = [
“RuGxM62EgW”,
“rx3Nmu59oV”,
“eIgdXq6B4N”,
“75dY890jAA”,
“5yy4GJvTu0”,
“1BB775rZDU”,
“MTlmcz2kmL”,
“vN7MZ71FbL”,
]
class Hit_The_Library:
将已有密码文件生成密码字典,key是明文密码,value是秘文
def get_password_dict(self, password_list):
self.password_dict = {}
m = hashlib.md5()
for i in password_list:
m.update(i.encode(‘utf-8’))
self.password_dict[i] = m.hexdigest()
return self.password_dict
破解
def brute_force(self, private_password):
for k, v in self.password_dict.items():
if v == private_password:
return f’明文密码为:{k}\n密文密码为:{v}’
hit = Hit_The_Library()
hit.get_password_dict(password_list)
print(hit.brute_force(“a191f8c8408c5a90fd970a02d0a3b52a”))
明文密码为:MTlmcz2kmL
密文密码为:a191f8c8408c5a90fd970a02d0a3b52a
密码加盐
对于私密信息不能直接以明文传输,比如密码,应该将之加密后传输。为防止数据包被截获后通过撞库而破解,可在密码内掺入其他内容。
import hashlib
m = hashlib.sha512()
m.update(‘首部添加的内容’.encode(‘utf-8’))
m.update(‘password’.encode(‘utf-8’))
m.update(‘尾部添加的内容’.encode(‘utf-8’))
print(m.hexdigset())
文件校验
1、校验全部内容,如果文件过大耗时会比较长。
‘’’
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!