MD5加密

  想一个事情. 你在银行取钱或者办卡的时候. 我们都要输入密码. 那这个密码如果就按照我们输入的那样去存储. 是不是很不安全啊. 如果某一个程序员进入到了银行的数据库. 而银行的数据库又存的都是明文(不加密的密码)密码. 这时, 整个银行的账户里的信息都是非常非常不安全的. 那怎么办才安全呢? 给密码加密. 并且是不可逆的加密算法. 这样. 即使获取到了银行的账户和密码信息. 对于黑客而言都无法进行破解. 那我们的账号就相对安全了很多. 那怎么加密呢? 最常⻅的就是用MD5算法.
  MD5是一种不可逆的加密算法. 它是可靠的. 并且安全的. 在python中我们不需要手写这一套算法. 只需要引入一个叫hashlib的模块就能搞定MD5的加密工作

1 import hashlib
2 
3 obj = hashlib.md5()
4 obj.update("123456".encode("utf-8")) # 加密的必须是字节
5 miwen = obj.hexdigest()
6 print(miwen) #e10adc3949ba59abbe56e057f20f883e
View Code

  那这样的密文安全么?其实是不安全的.当我们用这样的密文去找一个所谓的MD5解密工具.是有可能解密成功的.

  这就尴尬了.MD5不是不可逆么?注意.这里有个撞库的问题.就是,由于MD5的原始算法已经存在很久了,那就有一些人用一些简单的排列组合来计算MD5. 然后当出现相同的MD5密文的时候就很容易反推出原来的数据是什么.所以并不是MD5可逆, 而是有些别有用心的人把MD5的常见数据已经算完并保留起来了.
  那如何应对呢? 加盐就行了. 在使用MD5的时候. 给函数的参数传递一个byte即可.

1 import hashlib
2 
3 obj = hashlib.md5(b"fjlksajflvbcvbsdfkjasfsalwer123dfskjf")  # 加盐
4 obj.update("123456".encode("utf-8"))  # 加密的必须是字节
5 miwen = obj.hexdigest()
6 print(miwen)  # fd23725d0e0170df9104bdac09f92933
View Code

  此时你再去任何网站去试,累死他也解不开密

  那MD5如何应用呢?

 1 import hashlib
 2 
 3 
 4 def my_md5(s):
 5     obj = hashlib.md5(b"fjlksajflkjasfsalwer123dfskjf")
 6     obj.update(s.encode("utf-8"))  # 加密的必须是字节
 7     miwen = obj.hexdigest()
 8     return miwen
 9 
10 
11 # 123456: 2a596381e4d0f4e1fe4e3d5f864213ff
12 username = input("请输入用户名:")
13 password = input("请输入密码:")
14 # 数据存储的时候.
15 # username: my_md5(password)
16 # 假设现在的用户名和密码分别是
17 # abc: 2a596381e4d0f4e1fe4e3d5f864213ff ==> abc: 123456
18 # 用户登录
19 if username == "abc" and my_md5(password) == "2a596381e4d0f4e1fe4e3d5f864213ff":
20     print("成功")
21 else:
22     print("失败")
View Code

  所以. 以后存密码就不要存明文了. 要存密文. 安全, 并且. 这里加的盐不能改来改去的.否则, 整套密码就都乱了.

原文地址:https://www.cnblogs.com/Majintao/p/9755103.html