加密算法
- 对称加密
- 数据加密使用相同的钥匙
- 常见的 对称加密 算法主要有
DES
、3DES
、AES
等
- 非对称加密
- 加密和解密使用不同的钥匙,公钥用于加密数据,私钥用于解密数据
- 常见的 非对称算法 主要有
RSA
、DSA
等
- 单向加密
- 只能加密,不能解密
- 散列算法(hash) 主要有
SHA-1
、MD5
等- 特点:不可逆、定长输出、抗修改性、强碰撞性。
方法 | 作用 |
---|---|
hashlib.new(name,data=b) |
生成一个hash 对象 |
hashlib.hash(data=b) |
生成一个使用该算法的hash 对象 |
hash 对象.update (arg=None ) |
更新hash 对象 |
hash 对象.digest() |
返回hash 算法计算得到的值(bytes 类型) |
hash 对象.hexdigest() |
返回hash 算法计算得到的值(str 类型) |
hashlib.md5() |
生成md5 对象 |
import hashlib
hashlib.md5('你好')
返回 TypeError: Unicode-objects must be encoded before hashing
类型错误
提示hashlib.ma5()
加密的数据必须是一个bytes
类型的数据,因此要对他进行编码
import hashlib
res = hashlib.ma5('你好'.encode())
print(res)
返回值 <md5 HASH object @ 0x0000015381FA3C10>
- 这里可以看到返回的值是一个类,那么要得到他的值可以使用
digest
、hexdigest
方法
import hashlib
res = hashlib.ma5('你好'.encode())
print(res.hexdigest())
print(res.digest())
返回值
8277e0910d750195b448797616e091ad
b'\x82w\xe0\x91\ru\x01\x95\xb4Hyv\x16\xe0\x91\xad
、
- 如果想要更新
hash
对象内的值要使用update
方法对对象进行更新。
import hashlib
a = 'd'.encode()
res = hashlib.md5(a)
print(res.hexdigest())
print(res.digest())
res.update('张三'.encode())
print(res.hexdigest())
print(res.digest())
返回值
8277e0910d750195b448797616e091ad
b'\x82w\xe0\x91\ru\x01\x95\xb4Hyv\x16\xe0\x91\xad'
9bcb8586295cd14fc9f910a521a1cccf
b'\x9b\xcb\x85\x86)\\\xd1O\xc9\xf9\x10\xa5!\xa1\xcc\xcf