• 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

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

  • 相关阅读:
    [HAOI2008]硬币购物
    [SCOI2005]骑士精神
    [ZJOI2007]最大半联通子图
    [HAOI2007]反素数
    [SCOI2005]繁忙的都市
    小凯的疑惑
    5月16日vj题解
    周六题目前四题详解
    Codeforces Round #629 (Div. 3)做题记录
    Codeforces Round #570 (Div. 3) B. Equalize Prices
  • 原文地址:https://www.cnblogs.com/Majintao/p/9755103.html
Copyright © 2020-2023  润新知