hashlib
# hashlib的基本概念
可以在:base64在线解码 进行测试
- 什么叫hash:hash是一种算法(不同的hash算法只是复杂度不一样)(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法),该算法接受传入的内容,经过运算得到一串hash值
- hash值的特点是(hash值/产品有三大特性:):
- 只要传入的内容一样,得到的hash值必然一样=====>要用明文传输密码文件完整性校验
- 不能由hash值返解成内容=======》把密码做成hash值,不应该在网络传输明文密码(只能有内容返回hash值)
- 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的(如从网上下载文件要进行hash校验,保证网络传输没有丢包)
基于2.1和2.3可以做文件下载一致性的校验 基于2.1和2.2可以对用户密码进行加密 hash算法就像一座工厂,工厂接收你送来的原材料(可以用m.update() 为工厂运送原材料),经过加工返回的产品就是hash值
'''
加密算法
!!!!! base64在线解码
'''
import hashlib
msg = "Haoop大数据"
md5 = hashlib.md5(msg.encode("utf-8")) # 32位 因为不识别字符串,所以要encode()解码
print(md5, type(md5))
print(len(md5.hexdigest()), "md5:", md5.hexdigest()) # 打印加密算法的值 d2728ceba2d1849328657e1f84cd19c3
sha1 = hashlib.sha1(msg.encode("utf-8")) # 40 95b3c237de92cee3a575178644b94bd64914a62b
print(len(sha1.hexdigest()), "sha1:", sha1.hexdigest())
sha256 = hashlib.sha256(msg.encode("utf-8")) # 64 6ccd2fa719650a6de9d997836a1d321272407876d981b7ed8a1ab5d1643c8cee7
print(len(sha256.hexdigest()), "sha512:", sha256.hexdigest())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 使用
例1:
import hashlib
# # ######## 256 ########
# # 1、造出hash工厂
hash = hashlib.sha256('898oaFs09f'.encode('utf8')) # 同一种hash算法得到的长度是固定的
# # 2、运送原材料
hash.update('alvin'.encode('utf8')) # 工厂传入的原材料都是bytes类型
# # 3、产出hash值
print(hash.hexdigest()) # e79e68f070cdedcfe63eaf1a2e92c83b4cfb1b5c6bc452d214c1b7e77cdfd1c7
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
例2:
'''
#例1: 解析:一般做web会把用户的注册的密码加密,并保存到数据库。
等用户下一次输入密码,就把新输入的密码也用同样的加密格式,在与数据库的密码比较。
如果两次的加密密码一样,就登陆成功,否则失败
'''
password = "123456"
list1 = []
md5 = hashlib.md5(password.encode("utf-8")) # 把原来的密码加密成md5算法加密
list1.append(md5.hexdigest()) # 把加密的值保存到列表中
# 输入
pwd = input("输入密码")
pwd = hashlib.md5(pwd.encode("utf-8"))
newpwd = pwd.hexdigest() # 把新输入的值加密
print(list1, "\\n", newpwd)
for i in list1:
if newpwd == i: # 两次进行比较
print("登陆成功")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
编辑 (opens new window)
上次更新: 2023/05/17, 23:08:21