Python的hashlib模块!

Python的hashlib模块!


今天博主跟大家聊一聊如何使用Python的hashlib模块!不喜勿喷,如有建议欢迎补充、讨论!

关于安装和汉化可以观看博主的这篇文章《下载安装及汉化 》以及Python系列:windows10配置Python3.0开发环境!,安装完毕重启VsCode!以及VSCode配置Python开发环境!


Come on!什么是hashlib模块

hashlib是一个提供字符加密功能的模块,包含MD5和SHA的加密算法,具体支持md5,sha1, sha224, sha256, sha384, sha512等算法。 该模块在用户登录认证方面应用广泛,对文本加密也很常见。模块调用很简单,那么就让我们一起来看看。。

基本调用:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@File    :   demo.py
@Time    :   2019/10/21 13:55:50
@Author  :   YongJia Chen 
@Version :   1.0
@Contact :   chen867647213@163.com
@License :   (C)Copyright 2018-2019, Liugroup-NLPR-CASIA
@Desc    :   None
'''

# here put the import lib

import hashlib

name = 'sunny chen'

new_md5 = hashlib.md5()  #创建hashlib的md5对象
new_md5.update(name.encode('UTF-8'))  #将字符串载入到md5对象中,获得md5算法加密(载入之前记得设置字符串编码格式)。
print(new_md5.hexdigest())  #通过hexdigest()方法,获得new_md5对象的16进制md5显示。

简单来说。就是三步:

  1. 建立加密对象。
  2. 对字符串进行算法加密。
  3. 获得16进制显示

可以创建的加密算法有:md5,sha1, sha224, sha256, sha384, sha512

import hashlib

name = 'sunny chen'

new_md5 = hashlib.md5()  #创建hashlib的md5对象
new_md5.update(name.encode('UTF-8'))  #将字符串载入到md5对象中,获得md5算法加密(载入之前记得设置字符串编码格式)。
print(new_md5.hexdigest())  #通过hexdigest()方法,获得new_md5对象的16进制md5显示。

new_sha1 = hashlib.sha1()  
new_sha1.update(name.encode('UTF-8'))  #将字符串载入到md5对象中,获得sha1算法加密(载入之前记得设置字符串编码格式)。
print(new_sha1.hexdigest())

new_sha256 = hashlib.sha256()
new_sha256.update(name.encode('UTF-8'))  #将字符串载入到md5对象中,获得sha256算法加密(载入之前记得设置字符串编码格式)。
print(new_sha256.hexdigest())

简单调用:

new_md5 = hashlib.new('md5',name.encode('UTF-8')).hexdigest()
print(new_md5)
#或者
new_md5 = hashlib.md5(str(time.time().encode('utf-8')).hexdigest()

注意:向对象中传入字符串时,必须为编码类型。可以使用字符串前b’ '的方法或使用.encode(‘UTF-8’)的方法,使字符串变为bytes类型。

下面我们用一个简单的例子来说明最常用的MD5算法在实际中的应用。在引入例子前,让我们先对MD5的基本特性有个认识。

md5算法的特点:

  1. 压缩性:任意长度的数据,算出的MD5值的长度都是固定的。
  2. 容易计算:从原数据计算出的MD5值很容易。不管数据多大,很快就能算出一串MD5字符串来。
  3. 抗修改性:对原数据进行任何改动,哪怕修改任何一个字节,生成的MD5值也有会很大的区别。
  4. 强抗碰撞:已知原数据和MD5,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

OK,那我们已经知道了MD5算法的特点。那么问题来了,MD5既然每次生成的值都是固定的。那么虽然是单向生成不可反推,但是如果通过碰撞方法对字符串生成MD5后与MD5值碰撞,是不是就会得到MD5对应的字符串了呢?答对了!这样是可以的,换句话说,如果某用户数据库泄露了,拿到了密码库中的MD5就能通过碰撞的方法将密码破解出来。那么问题又来了,既然这样,那也没有什么用了啊。。非也,让我们用一个小小的技巧,让这个碰撞方法失效。这个方法就是“加盐”,什么是加盐呢?

“加盐”就是对原密码添加额外的字符串,然后再生成MD5值,这样就没有办法进行破解了,除非拿到“加盐”字符串,但碰撞方法也是需要一个一个重新计算MD5值后再进行碰撞对比的,难度也是极其大的。那么看下面的代码吧:

MD5密码认证,带“加盐”方法

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@File    :   hashlibYan.py
@Time    :   2019/10/21 14:09:41
@Author  :   YongJia Chen 
@Version :   1.0
@Contact :   chen867647213@163.com
@License :   (C)Copyright 2018-2019, Liugroup-NLPR-CASIA
@Desc    :   None
'''

# here put the import lib

import hashlib

yan = '!任#意%字^符@'  #定义加盐字符串
pwd = input('>>>')

md5_pwd = hashlib.md5()
md5_pwd.update((pwd + yan).encode('UTF-8'))  #加盐
pwd = md5_pwd.hexdigest()
#pwd = hashlib.new('md5',(pwd+yan).encode('UTF-8')).hexdigest()   #也可以这样简写哦。。一句话搞定。
print(pwd)

快去动手试试吧!


到这里:Python的hashlib模块!分享完毕了,快去试试吧!


最后

  • 更多参考精彩博文请看这里:陈永佳的博客

  • 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈永佳

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值