官方文档:https://docs.python.org/zh-cn/3/library/hashlib.html

什么是加密

将明文信息改变为难以读取的密文内容,使之不可读的过程。密文数据的表现形式一般都是一串没有规则的字符串

加密算法

加密算法有很多,算法的难易程度可以根据产生密文的长短来判断,越长意味着算法越复杂。常见的有。常见的 对称加密 算法主要有 DES3DESAES 等,常见的 非对称算法 主要有 RSADSA 等,散列算法 主要有 SHA-1MD5

什么时候使用加密

涉及到隐私数据的时候,应该考虑使用加密,最为常见的就是对用户的密码加密,防止密码泄露

使用

普通加密

  1. import hashlib
  2. # 1.指定md5算法(最为常见)
  3. md5 = hashlib.md5()
  4. # 2.将明文数据传递给算法对象
  5. md5.update(b'123') # 只能接收bytes类型
  6. """如果字符串中是纯数字和英文 那么直接在前面加b转成bytes类型"""
  7. # 3.获取加密之后的密文数据
  8. res = md5.hexdigest()
  9. print(res)
  10. # 202cb962ac59075b964b07152d234b70
  11. """加密之后的结果是无法直接反解密的 """
  12. # 所谓的反解密其实是暴力破解,反复的猜
  13. {'密文1':123,'密文2':321}

加盐处理

目的是为了增加破解的难度(添加一些额外的干扰项)

  1. import hashlib
  2. md5 = hashlib.md5()
  3. # 加盐处理
  4. md5.update('这是加盐的内容'.encode('utf8'))
  5. md5.update(b'123')
  6. res = md5.hexdigest()
  7. print(res)
  8. # daa22f9b2e6560ded7fe0bc29dfac35b
  9. # 动态加盐
  10. times = str(datetime.date.today()) # 通过当前年月日进行动态加盐
  11. md5.update(times.encode())
  12. md5.update(b'123')
  13. res = md5.hexdigest()
  14. print(res)
  15. # 07f7006c551222d7478932efe136aaf8

应用场景

密码加密如何比对

通过用户输入的明文,进行相同的加密算法变成密文,拿着密文与数据库里面的密文进行对比,如果一致就是密码正确不一致就是错误

文件内容一致性校验

用户在下载软件之后,也会对内容做相同的加密,之后比对两次密文是否一致,如果一致表示中途没有被修改,如果不是表示中途被修改过,可能存在病毒。针对大文件一致性校验的优化策略,可以考虑对文件内容进行切片读取并加密的操作