Python之hashlib模块md5加密

时间:2022-12-25 22:37:41

来源:

  • https://www.cnblogs.com/UnGeek/archive/2013/03/30/2990876.html
  • https://www.cnblogs.com/weiman3389/p/6056305.html
  • https://www.cnblogs.com/yyds/p/7072492.html
  • 加盐——https://www.zhihu.com/question/20299384

一、基础使用

Python之hashlib模块md5加密Python之hashlib模块md5加密
1 import hashlib
2 inp = input('输入:>>')
3
4 #创建一个md5加密对象
5 hash = hashlib.md5()
6 #生成md5加密字符串
7 hash.update(bytes(inp,encoding='utf-8'))
8 #把md5加密好的字符串打印出来
9 print(hash.hexdigest())
使用hashlib
  • hash.update(data)
    • 更新哈希对象所要计算的数据,多次调用为累加效果
    • 如 m.update(a) ; m.update(b) 等价于 m.update(a+b)
  • hash.hexdigest()
    • 返回传递给update()函数的所有数据的摘要信息(又称 数据指纹)
    • 十六进制格式的字符串
  • hash.digest()
    • 返回传递给update()函数的所有数据的摘要信息
    • 二进制格式的字符串

二、hashlib模块使用步骤

  • 1、获取一个哈希算法对应的哈希对象(比如名称为hash)
    • hashlib.new(哈希算法名称, 初始出入信息)
      • 获取这个哈希对象,如hashlib.new('MD5','Hello'),hashlib.new('SHA1','Hello')
    • hashlib.哈希算法名称()
      • 获取这个哈希对象,如hashlib.md5(),hashlib.sha1()
  • 2、设置/追加输入信息
    • 调用已得到哈希对象的 update(输入信息) 方法可以设置或追加输入信息,多次调用该方法,等价于 把每次传递的参数凭借后进行作为一个参数垫底给update()方法。
    • 多次调用为累加,不是覆盖,见hash.update()
  • 3、获取输入信息对应的摘要
    • 调用已得到的哈希对象的 digest() 方法或 hexdigest() 方法即可得到传递给update()方法的字符串参数的摘要信息。
    • digest()方法返回的摘要信息是一个二进制格式的字符串,其中可能包含非ASCII字符、NULL字节,该字符串长度可以通过哈希对象的 hash.disgest_size 属性获取
    • hexdigest()方法返回的摘要信息是一个十六进制格式的字符串,该字符串中只包含十六进制的数字,且长度比digest()返回结果长度的2倍,这可以用于邮件的安全交互或其他非二进制环境中。

三、优化

  1、防撞库,使用“加盐”加密

Python之hashlib模块md5加密Python之hashlib模块md5加密
1 import hashlib
2 inp = input('输入:>>')
3 #创建一个md5加密对象,并‘加盐’加密,防撞库反解
4 hash = hashlib.md5('super'.encode('utf-8'))
5 #生成md5加密字符串
6 hash.update(bytes(inp,encoding='utf-8'))
7 #把md5加密好的字符串打印出来
8 print(hash.hexdigest())
“加盐”

  2、一句

Python之hashlib模块md5加密Python之hashlib模块md5加密
1 hash = hashlib.md5(inp.encode('utf-8')).hexdigest()
一句