广告位联系
返回顶部
分享到

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

python 来源:互联网 作者:佚名 发布时间:2022-11-10 20:00:55 人浏览
摘要

1.hashlib的简介 hashlib 是一个提供了一些流行的hash(摘要)算法的Python标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512等 什么是摘要算法呢?摘要算法又称哈希算法、散列算法

1.hashlib的简介

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

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

2.hashlib的使用

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

1. 常用属性

1

2

3

4

5

6

hashlib.algorithms

#列出所有加密算法

h.digest_size

#产生的散列字节大小。

h.block_size

#哈希内部块的大小

2. 常用方法

1

2

3

4

5

6

7

8

9

10

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. 使用示例

1

2

3

4

5

6

7

8

9

10

# 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. 基本演示

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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模块主要应用于,用户账号密码登录,对明文密码进行加密等

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

'''

学习中遇到问题没人解答?小编创建了一个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模块进行加密。
  • 加密可以写成加密函数,方便多处调用
  • 提高密码解密的复杂性,代码中多加字符串。(加密算法虽然依然非常厉害,但是也存在缺陷,即:通过撞库可以反解。所以,有必要对加密密码进行加盐。)

版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/qdPython/article/details/127690372
相关文章
  • 使用 PyQt5设计下载远程服务器日志文件程序的思

    使用 PyQt5设计下载远程服务器日志文件程序的思
    最近通过 PyQt5 设计了一个下载服务器指定日期日志文件的程序,里面有些有意思的技术点,现在做一些分享。 PyQt5 是一套 Python 绑定 Digia
  • Python hashlib模块详细讲解使用方法
    1.hashlib的简介 hashlib 是一个提供了一些流行的hash(摘要)算法的Python标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512等 什么是摘
  • python实现华氏温度和摄氏温度转换的方法

    python实现华氏温度和摄氏温度转换的方法
    华氏温度和摄氏温度转换 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 TempStr=input(请输入带有符号的温度值,C/c表示摄氏度、F/f表示华氏温度:) if Te
  • Python中PyMySQL的基本操作介绍
    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。 如果还未
  • 四种Python机器学习超参数搜索方法总结
    在建模时模型的超参数对精度有一定的影响,而设置和调整超参数的取值,往往称为调参。 在实践中调参往往依赖人工来进行设置调整范围
  • python yield迭代器介绍
    在python深度学习模型读取数据时,经常遇到yield,互联网搜索后,将比较容易理解的说明记录一下。 二、使用步骤 1.引入库 代码如下(示例
  • python实现一个围棋小游戏

    python实现一个围棋小游戏
    一道Python课作业题,大致如下: 编写一个类: 该类Building应具有以下方法: ●一个构造函数,它根本不接受任何参数(除了通常的`self`) ●s
  • Pycharm配置anaconda环境图文教程

    Pycharm配置anaconda环境图文教程
    1.配置anaconda环境 以下内容在下载完anaconda后实现 快捷键win+r,打出命令行cmd,进入黑色 界面 输入conda info --env,跳出以下内容: 如果没有 则
  • Python设置环境字体方法教程

    Python设置环境字体方法教程
    Python设置环境字体方法 第一步:首先,打开Python,然后点击Options。 第二步:然后,我们就能点击下拉菜单中的Settings。 第三步:此时,我
  • Python Django教程之实现新闻应用程序

    Python Django教程之实现新闻应用程序
    Django是一个用Python编写的高级框架,它允许我们创建服务器端Web应用程序。在本文中,我们将了解如何使用Django创建新闻应用程序。 我们将
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计