MD5

MD5是一个非常常见的摘要(hash)逻辑. 其特点就是小巧. 速度快. 极难被破解(传闻王小云女士把MD5破解)。所以, md5依然是国内非常多的互联网公司选择的密码摘要算法。

MD5是一种密码摘要算法。在数学上,摘要其实计算逻辑就是hash。hash算法是非常优秀的一种摘要逻辑。无法通过密文得到明文。

 

Hash在线计算、md5计算、sha1计算、sha256计算、sha512计算:

https://1024tools.com/hash

https://www.cmd5.com

 

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,只能抠代码....扣起来非常痛苦。

posted @ 2023-08-05 23:27  屠魔的少年  阅读(3)  评论(0)    收藏  举报