我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python hashlib模块详细讲解使用方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python hashlib模块详细讲解使用方法

1.hashlib的简介

hashlib 是一个提供了一些流行的hash(摘要)算法的Python标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512等

什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。更多请看:hashlib — 安全哈希与消息摘要

2.hashlib的使用

本文以hashlib中MD5算法为例,其他的sha224、sha256算法用法和MD5基本一致。

1. 常用属性

hashlib.algorithms
#列出所有加密算法
h.digest_size
#产生的散列字节大小。
h.block_size
#哈希内部块的大小

2. 常用方法

hash.new([arg])
# 创建指定加密模式的hash对象
hash.update(arg)
# 更新哈希对象以字符串参数。如果同一个hash对象重复调用该方法,m.update(a); m.update(b) 等价于 m.update(a+b)
hash.digest()
# 返回摘要,作为二进制数据字符串值。
hash.hexdigest()
# 返回摘要,作为十六进制数据字符串值
hash.copy()
# 复制

3. 使用示例

# MD5 的使用
#其它的sha1,sha256就是加密函数不一样,其余基本相同,这里就不演示了
import hashlib
def jm_md5(password):
    m = hashlib.md5()  # 构建MD5对象
    m.update(password.encode(encoding='utf-8')) #设置编码格式 并将字符串添加到MD5对象中
    password_md5 = m.hexdigest()  # hexdigest()将加密字符串 生成十六进制数据字符串值
    return password, password_md5
g = jm_md5('123456')
print(g)

#结果输出:
('123456', 'e10adc3949ba59abbe56e057f20f883e')

3.hashlib的特点

  • 摘要算法在很多地方都有广泛的应用。
  • 要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改。
  • 它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。

一个优秀的 hash 算法,将能实现:

  • 正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。
  • 逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。
  • 输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。
  • 冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。

4.实际演示

1. 基本演示

import hashlib
# 一、在构建对象直接插入加密字符串
m1 = hashlib.md5('hello python'.encode(encoding='utf-8'))  # 构建MD5对象
print(m1.hexdigest())   # 结果为: e53024684c9be1dd3f6114ecc8bbdddc
# 二、通过update方法 往MD5对象中增加字符串参数
m2 = hashlib.md5()  # 构建MD5对象
m2.update('hello python'.encode(encoding='utf-8')) # 设置编码格式 并将字符串添加到MD5对象中
password_md5 = m2.hexdigest()
print(m2.hexdigest())   # 结果为 e53024684c9be1dd3f6114ecc8bbdddc
# 三、当数据量过过大时,可以分块摘要,例如:
m3 = hashlib.md5()
m3.update("hello ".encode("utf-8"))  # 注意:分块是空格也要保持一致
m3.update("python".encode("utf-8"))
print(m3.hexdigest())  # 结果为:e53024684c9be1dd3f6114ecc8bbdddc
# MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。

三种方式,往构造的MD5对象中传参,只要传参的字符串一致,最后生成的结果是一样的。

这说明hash算法就像一座工厂,工厂接收你送来的原材料(可以用m.update()为工厂运送原材料),经过加工返回的产品就是hash值。这也是摘要算法的一个特点,它不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改。

2. 应用场景案例

hashlib模块主要应用于,用户账号密码登录,对明文密码进行加密等

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import hashlib
USER_LIST = []
def pwd_Md5(password):
    password = password+'hello python'  # 字符串混淆加盐,可以设置更复杂一点
    return hashlib.md5(password.encode("utf-8")).hexdigest()
def register():
    print('**************用户注册**************')
    while True:
        user = input('请输入用户名:')
        if user.isalpha():
            break
    while True:
        password1 = input('请输入密码>>>:').strip()
        passwprd2 = input('请重复密码>>>:').strip()
        if password1 == passwprd2:
            password = pwd_Md5(password1)  # 将密码进行Md5加密
            break
        else:
            print('密码不正确,重新输入!')
    temp = {'username':user,'password':password}
    USER_LIST.append(temp)
def login():
    print('**************用户登陆**************')
    user = input('请输入用户名:')
    pwd = input('请输入密码:')
    for item in USER_LIST:  
        if item['username'] == user and item['password'] == pwd_Md5(pwd):
            return True
if __name__=='__main__':
    register()
    if login():
        print('登陆成功')
    else:
        print('登陆失败')

#结果输出:
**************用户注册**************
请输入用户名:lizexiong
请输入密码>>>:123456
请重复密码>>>:123456
**************用户登陆**************
请输入用户名:lizexiong
请输入密码:123456
登陆成功

用户登录需要使用密码,密码一定要加密,保证用户的信息安全。

  • 加密可以使用hashlib模块进行加密。
  • 加密可以写成加密函数,方便多处调用
  • 提高密码解密的复杂性,代码中多加字符串。(加密算法虽然依然非常厉害,但是也存在缺陷,即:通过撞库可以反解。所以,有必要对加密密码进行加盐。)

到此这篇关于Python hashlib模块详细讲解使用方法的文章就介绍到这了,更多相关Python hashlib模块内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python hashlib模块详细讲解使用方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python hashlib模块详细讲解使用方法

hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512. 另外,模块中所定义的 new(name, string=”) 方法可通过指定系统所支持的hash算法来构造相应的hash对象
2022-11-13

Python base64和hashlib模块及用法详解

这篇文章主要介绍了Python base64和hashlib模块,本文通过实例代码介绍了base64和hashlib模块的相关知识,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-02-24

python random模块的详细讲解

1.random()方法random.random()方法返回的是[0,1)之间的浮点数>>> import random c = random.random()print c 0.3110676697832. randrange()方法语
2023-01-31

Python的加密模块之hashlib与base64详解及常用加密方法

我们来学习一下Python中的加密模块,加密模块在工作中被广泛应用,比如数据的传入不希望被捕获,通过把数据加密。这样即使被捕获也无法获取到数据的真实信息,今天我们就来学习一下关于加密的方法,感兴趣的朋友跟随小编一起看看吧
2023-02-24

Python加密与解密模块hashlib与hmac怎么使用

这篇“Python加密与解密模块hashlib与hmac怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python加
2023-06-30

C++BoostLockfree超详细讲解使用方法

Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
2022-11-21

AndroidSurfaceView与TextureView使用方法详细讲解

SurfaceView和TextureView都继承View,与普通的View不同的是,它俩可以在独立线程中绘制渲染,性能更高,所以常被应用在对绘制速率要求比较高的场景,比如相机预览,视频播放等等
2022-11-13

详解Python使用simplejson模块解析JSON的方法

1,Json模块介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Stan
2022-06-04

C++stack与queue使用方法详细讲解

stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作;队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素
2023-01-04

C++ Boost Lockfree超详细讲解使用方法

Boost Lockfree 是一个基于 C++ 的库,用于实现无锁的数据结构和算法。无锁的数据结构和算法是为了解决并发编程中的竞争条件和锁竞争而设计的。由于无锁的数据结构和算法可以避免锁竞争,因此在高度并发的场景中,可以提供更好的性能和可
2023-08-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录