Python hashlib模块中的md5加密
一、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值
运行结果:
通过初始化一个md5()实例,然后通过update()方法,传入要加密的内容(注意要先encode编码),然后通过md5对象的hexdigest()方法返回 md5 值。最终生成了字符串‘abcdef’的 md5 值,这是一个十六进制的字符串。
三、md5常用方法
运行结果:
除了可以通过update()方法传入需要加密的内容,也可以直接在初始化md5对象时传入需加密内容(也需要先编码)。
通过md5对象的block_size属性可以返回md5值的长度,name属性可以返回值的名字(默认叫md5)。
md5对象的copy()方法可以复制对象本身。复制结果与原对象相同。
如果不是通过hexdigest()方法,通过digest()方法返回的是二进制字符串,digest_size返回二进制字符串的长度。
四、hexdigest与digest的转换
运行结果:
实现hexdigest与digest的转换,需要使用binascii模块的hexlify()和unhexlify()这两个方法。hexlify()将二进制结果转换成十六进制结果,unhexlify()反之。