首页 > 编程语言 >Python——第五章:hashlib模块

Python——第五章:hashlib模块

时间:2023-12-13 11:23:43浏览次数:50  
标签:hashlib obj 密码 Python SHA 第五章 哈希 MD5

hashlib 模块

hashlib 模块是 Python 中用于加密散列(hash)算法的模块。它提供了对常见的哈希算法(如MD5、SHA-1、SHA-256等)的支持,使得开发者可以轻松地在其应用中进行数据的安全散列。

以下是 hashlib 模块中一些常用的哈希算法:

  1. MD5 (Message Digest Algorithm 5): 产生128位的哈希值,通常以32位十六进制数字表示。

  2. SHA-1 (Secure Hash Algorithm 1): 产生160位的哈希值,通常以40位十六进制数字表示。然而,由于SHA-1存在一些弱点,推荐使用更安全的算法。

  3. SHA-224, SHA-256, SHA-384, SHA-512: SHA-2 系列,分别产生224、256、384和512位的哈希值。

md5算法:

我们使用 md5() 创建了一个 MD5 哈希对象,然后使用 update() 方法更新了输入数据,最后使用 hexdigest() 方法获取了最终的 MD5 哈希值。

import hashlib

# 创建MD5对象
obj = hashlib.md5()
# 把要加密的信息传递给obj
obj.update("666666".encode("utf-8"))
# 从obj中拿到密文
mi = obj.hexdigest()
print(mi)

#运行结果
f379eaf3c831b04de153469d1bec345e

这里注意:update要求,我们给定的字符串需要先被编码encode("utf-8"),再进行哈希

obj.update("666666")

#运行结果
    obj.update("666666")
TypeError: Strings must be encoded before hashing

MD5哈希函数算法是单向的,也就是用拿到的密码是无法反向解密的。因此,通常存储密码时,都是存储其哈希值而不是明文密码。

但是因为MD5的算法已经存在很多年了,现在很多网站上都有MD5的撞库查询法:

这是我们拿加密好的值f379eaf3c831b04de153469d1bec345e来查询为666666的结果

如果一个网站仍然使用MD5来存储密码,这是一种不安全的做法,因为攻击者可以使用预先计算好的MD5散列(称为彩虹表)或现代碰撞攻击技术来破解密码。现代的密码存储做法通常包括使用“盐”(salt)和强大的哈希算法,以增加密码的安全性。

MD5解决撞库的方法:加盐

加盐的基本思想是在计算哈希值之前,将一个随机生成的字符串与用户密码组合在一起。这个随机字符串就是“盐”(salt),每个用户都有一个唯一的盐值。通过在密码和盐的基础上计算哈希,可以避免使用相同密码的用户在哈希值上产生相同的模式。

加盐操作是一种提高密码安全性的常见做法,可以用于任何哈希算法。无论是MD5、SHA-1、SHA-256,还是其他更安全的哈希算法,都可以通过加盐操作来增加密码的复杂性,提高安全性。

盐必须是bytes类型,这里我们随便输入一个盐b'jkklwajdkljilasd'

obj = hashlib.md5(b'jkklwajdkljilasd')
obj.update("666666".encode("utf-8"))
print(obj.hexdigest())

#运行结果
f96b5f9f131ff8f0d7277b02cd243cc5

使用密码做盐,进行md5加密

def func(salt, s):
    obj =hashlib.md5(salt)
    obj.update(s.encode("utf-8"))
    return obj.hexdigest()

username = input("请输入你的用户名")
password = input("请输入你的密码")
mi_password = func(password.encode("utf-8"), password)
with open("user.txt", mode="w", encoding="utf-8") as f:
    f.write(username)
    f.write("\n")
    f.write(mi_password)

#运行结果,生成user.txt文档:
admin
bc177a7a9c7df69c248647b4dfc6fd84

在实际应用中,选择适当的哈希算法取决于具体的安全需求。在密码存储等敏感场景,推荐使用较强的哈希算法,如 SHA-256。

标签:hashlib,obj,密码,Python,SHA,第五章,哈希,MD5
From: https://www.cnblogs.com/Magiclala/p/17898668.html

相关文章

  • 【python】文件锁模块fcntl
      #!/usr/bin/python#coding:utf8importosimportsysimporttimeimportfcntl#导入模块classFLOCK(ojbect):def__init__(self,name):""":paramname:文件名"""self.fobj=open(name,'......
  • Python报错:performance hint: av/logging.pyx:232:5: the GIL to be acquired
     参考:https://stackoverflow.com/questions/77410272/problems-installing-python-av-in-windows-11https://github.com/PyAV-Org/PyAV/issues/1177  ================================  报错信息:C:\Windows.old\Users\chris>pipinstallavDefaultingtouserinstallatio......
  • Python报错:pkg-config could not find libraries ['avformat', 'avcodec', 'av
    参考:https://github.com/PyAV-Org/PyAV/issues/238https://pyav.org/docs/6.1.2/installation.html#mac-os-x  =====================  报错信息:C:\Users\liuxue>pipinstallavCollectingavUsingcachedav-0.3.3.tar.gzInstallingcollectedpackages:avRunning......
  • Python学习多线程、多进程、多协程记录
    一、多线程应用于请求和IO#1.Python中关于使用多线程多进程的库/模块#2.选择并发编程方式(多线程Thread、多进程Process、多协程Coroutine)前置知识: 一、三种有各自的应用场景 1.一个进程中可以启动多个线程 2.一个线程中可以启动多个协程 二、各自优缺点 1......
  • Python各种奇奇怪怪的写法以及常用案例
    工具类common#####工具类commonimportrequestsimporttimeimportjsonimportrandomimportosfromlxmlimportetreeimportconcurrent.futuresfromurllib.parseimportunquote,quotefromPILimportImagedefstrClear_v1(str):try:returnst......
  • 用python实现电子公文传输系统中遇到的数据库连接问题
    在实现电子公文传输系统时,数据库连接是一个重要的问题。Python中有多种库可以用于数据库连接,比如SQLite、MySQL、PostgreSQL等。下面是一个简单的示例,演示如何使用Python连接MySQL数据库:importmysql.connector#连接数据库conn=mysql.connector.connect(host="localhos......
  • python 报错应对列表
    =========================RESTART:D:/Python37/ziti1.py========================Traceback(mostrecentcalllast):File"D:/Python37/ziti1.py",line1,in<module>importdocxModuleNotFoundError:Nomodulenamed'docx'>>......
  • python123——西游记相关的分词,出现次数最高的20个
       #统计西游记人物出场次数,(去除冠词,代词等干扰)并降序排列p173importjiebaexcludes={"一个","那里","怎么","我们","不知","两个","甚么","不是","只见","原来","如何","这个","不曾&q......
  • python hash
    python中的hash我的博客程序源码原书:《Python全栈安全》这里使用python3.8,使用哈希函数计算消息的摘要信息,得到其哈希值(散列值)。在python下可以使用如下语句得到消息的哈希值:message='message'hash(message)哈希具有如下特性:确定性,相同的消息使用同一个哈希函数......
  • 深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现
     网络和Web开发是Python中不可或缺的重要领域,而其核心模块如urllib、requests和http在处理网络请求、HTTP请求和响应以及Web开发中扮演着关键的角色。这些模块为开发者提供了丰富的工具,使其能够灵活处理网络通信、构建Web应用和与远程服务器进行交互。深入了解这些模块的用法和作......