hashlib模块
1. hash
什么叫hash:
hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值
hash值的特点是:
1 只要传入的内容一样,得到的hash值必然一样=====>要用明文传输密码文件完整性校验
2 不能由hash值返解成内容=======》把密码做成hash值,不应该在网络传输明文密码
3 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的
hash的用途
用途1:特点2用于密文与密文的传输与验证
用途2:特点1,3用于文件内容完整性校验
hash算法就像一座工厂,工厂接收你送来的原材料(可以用.update()为工厂运送原材料),经过加工返回的产品就是hash值

import hashlib m = hashlib.md5() m.update('hello'.encode('utf-8')) # 必须为bytes print(m.hexdigest()) # 5d41402abc4b2a76b9719d911017c592 # m.update(b'Alex') print(m.hexdigest()) # a08372b70196c21a9229cf04db6b7ceb m.update(b'A') m.update(b'l') m.update(b'e') m.update(b'x') print(m.hexdigest()) # a08372b70196c21a9229cf04db6b7ceb ''' 注意:把一段很长的数据update多次,与一次update这段长数据,得到的结果一样 但是update多次为校验大文件提供了可能。 '''
# 加内容方式1 m.update('文件所有的内容') m.hexdigest() # 加内容方式2(推荐) m.update('hello'.encode('UTF-8')) m.update('world'.encode('UTF-8')) res = m.hexdigest() # helloworld print(res)
以上加密算法虽然非常厉害,但有·时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密(加盐)。
import hashlib # ######## 256 ######## hash = hashlib.sha256('da_shuai_bi'.encode('utf-8')) hash.update('Alex'.encode('utf-8')) print(hash.hexdigest()) # 338997013cf43e0646f96f64c28a43f194d674450bfee49576a3656746f36a39
2. 模拟撞库破解密码
import hashlib passwds = [ 'alex3714', 'alex1313', 'alex94139413', 'alex123456', '123456alex', 'a123lex', ] def make_passwd_dic(passwds): dic = {} for passwd in passwds: m = hashlib.md5() m.update(passwd.encode('utf-8')) dic[passwd] = m.hexdigest() return dic def break_code(cryptograph, passwd_dic): for k, v in passwd_dic.items(): if v == cryptograph: print('密码是===>\033[46m%s\033[0m' % k) cryptograph = 'aee949757a2e698417463d47acac93df' break_code(cryptograph, make_passwd_dic(passwds))

浙公网安备 33010602011771号