前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python hashlib模块中的md5加密

Python hashlib模块中的md5加密

作者头像
Python碎片公众号
发布2021-02-26 15:14:15
2.1K0
发布2021-02-26 15:14:15
举报
文章被收录于专栏:Python碎片公众号的专栏

一、md5简介

md5 (Message-Digest Algorithm 5)模块用于计算信息密文(信息摘要)。"message digests", 就是“信息摘要”的意思。

md5 对一段信息进行比较复杂的算法计算,生成一个128位的哈希值密文。md5 的生成过程比较复杂,主要分几大步骤,我们这里就不说生成原理了,搜索一下就可以了。

md5 是从 md2, md4 逐步演进而来的,两个不同的讯息计算得到相同的md5值(常称为“碰撞”)的可能性是非常低的,2的128次方分之一。所以 md5 可以被当作唯一值使用,类似于“指纹”。

当然,md5 已经被破解了,破解后可以很容易碰撞成功。不过,如果我们的使用场景不是那种高机密的场景,也不会有人来破解,那么我们可以放心的使用,并且md5是不可逆的,破解了也无法反解出我们的原始文件内容。

在Python2中,有一个模块就叫md5,现在也还可以使用,不过我们导入md5模块时,模块名上有一个中划线,说明现在已经不推荐使用md5模块了,Python3中已经废弃了。

Python将md5和sha两个模块整理成了一个模块,叫hashlib,兼容Python2和Python3,在Python2和Python3中都可以使用。

二、hashlib生成md5值

代码语言:javascript
复制
# coding=utf-8
import hashlib
 
 
md = hashlib.md5()
md.update('abcdef'.encode('utf-8'))
print(md.hexdigest())

运行结果:

代码语言:javascript
复制
e80b5017098950fc58aad83c8c14978e

通过初始化一个md5()实例,然后通过update()方法,传入要加密的内容(注意要先encode编码),然后通过md5对象的hexdigest()方法返回 md5 值。最终生成了字符串‘abcdef’的 md5 值,这是一个十六进制的字符串。

三、md5常用方法

代码语言:javascript
复制
import hashlib
 
 
md = hashlib.md5('abcdefg'.encode('utf-8'))
# print(dir(md))
print(md.hexdigest())
print(md.block_size)
print(md.name)
x = md.copy()
print(x.hexdigest())
print(x.name)
print("-" * 50)
print(md.digest())
print(md.digest_size)

运行结果:

代码语言:javascript
复制
7ac66c0f148de9519b8bd264312c4d64
64
md5
7ac66c0f148de9519b8bd264312c4d64
md5
--------------------------------------------------
b'z\xc6l\x0f\x14\x8d\xe9Q\x9b\x8b\xd2d1,Md'
16

除了可以通过update()方法传入需要加密的内容,也可以直接在初始化md5对象时传入需加密内容(也需要先编码)。

通过md5对象的block_size属性可以返回md5值的长度,name属性可以返回值的名字(默认叫md5)。

md5对象的copy()方法可以复制对象本身。复制结果与原对象相同。

如果不是通过hexdigest()方法,通过digest()方法返回的是二进制字符串,digest_size返回二进制字符串的长度。

四、hexdigest与digest的转换

代码语言:javascript
复制
import hashlib
import binascii
 
md = hashlib.md5('abcdefg'.encode('utf-8'))
print(md.hexdigest())
print(md.digest())
print("-" * 50)
print(binascii.hexlify(md.digest()).decode('utf-8'))
print(binascii.unhexlify(md.hexdigest()))

运行结果:

代码语言:javascript
复制
7ac66c0f148de9519b8bd264312c4d64
b'z\xc6l\x0f\x14\x8d\xe9Q\x9b\x8b\xd2d1,Md'
--------------------------------------------------
7ac66c0f148de9519b8bd264312c4d64
b'z\xc6l\x0f\x14\x8d\xe9Q\x9b\x8b\xd2d1,Md'

实现hexdigest与digest的转换,需要使用binascii模块的hexlify()和unhexlify()这两个方法。hexlify()将二进制结果转换成十六进制结果,unhexlify()反之。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python 碎片 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档