MD5
hash算法是非常优秀的一种摘要逻辑。无法通过密文得到明文。
Hash在线计算、md5计算、sha1计算、sha256计算、sha512计算:
MD5的特点:
这玩意不可逆. 所以. 摘要算法就不是一个加密逻辑.
相同的内容计算出来的摘要应该是一样的
不同的内容(哪怕是一丢丢丢丢丢不一样) 计算出来的结果差别非常大。
MD5一般应用于:
1. 密码(比如用户设置密码的时候,数据库存储密文。用户支付的时候,去数据库比对加密后的密文,前提是两个明文加密的结果是一样的)。
2. 一致性检测(比如MySQL软件官方下载)。

python实现md5:
from hashlib import md5
obj = md5()
obj.update("alex".encode("utf-8"))
# obj.update("wusir".encode('utf-8')) # 可以添加多个被加密的内容
bs = obj.hexdigest()
print(bs)

我们把密文丢到网页里. 发现有些网站可以直接解密. 但其实不然. 这里并不是直接解密MD5. 而是"撞库".
就是它网站里存储了大量的MD5的值. 就像这样:

而需要进行查询的时候. 只需要一条select语句就可以查询到了. 这就是传说中的撞库.
如何避免撞库: md5在进行计算的时候可以加盐. 加盐之后. 就很难撞库了.
from hashlib import md5
salt = "我是盐.把我加进去就没人能破解了"
obj = md5(salt.encode("utf-8")) # 加盐
obj.update("alex".encode("utf-8"))
bs = obj.hexdigest()
print(bs)

扩展:sha1不加盐
from hashlib import md5,sha1,sha256
obj = md5()
data = "123456"
obj = sha1()
obj.update(data.encode("utf-8"))
bs = obj.hexdigest()
print(bs)
# 7c4a8d09ca3762af61e59520943dc26494f8941b
sha1加盐
from hashlib import md5,sha1,sha256
obj = md5()
data = "alex"
salt = "salt"
obj = sha1(salt.encode("utf-8"))
obj.update(data.encode("utf-8"))
bs = obj.hexdigest()
print(bs)
# 048f04498e2ebce23db11e815f935685a71acb37
sha256加盐
from hashlib import md5,sha1,sha256
obj = md5()
data = "alex"
salt = "salt"
obj = sha256(salt.encode("utf-8"))
obj.update(data.encode("utf-8"))
bs = obj.hexdigest()
print(bs)
# 20b191e632d18e4b11695e9f060ee37aff117a94f01fd04a04d021c76a5f6c57
不论是sha1, sha256, md5都属于摘要算法. 都是在计算hash值. 只是散列的程度不同而已. 这种算法有一个特性. 他们是散列. 不是加密. 而且, 由于hash算法是不可逆的, 所以不存在解密的逻辑.
obj = md5()
obj.update("123456".encode("utf-8"))
print(obj.hexdigest())
# 记住这个值,123456 md5加密后是 e10adc3949ba59abbe56e057f20f883e
需要你背下来的东西. 下意识的反应....
当你在网站上看到了一些加密逻辑. 发现. 计算的结果是32位字符串
该字符串的组成是 0-9a-f(十六进制) 可以猜测是md5
如果结果是e10开头. 直接标准md5.
注意:如果计算的结果不是e10. 这会儿. 你要小心了. 有可能是魔改的md5,只能抠代码....扣起来非常痛苦。
浙公网安备 33010602011771号