我们写程序中,经常需要对字符串进行MD5加密,python中也支持这种加密,下面说说,这个加密模块:hashlib。 原则:只要你的输入是固定的,你的输出也一定是固定的。MD5是在hash上更改的
我们写程序中,经常需要对字符串进行MD5加密,python中也支持这种加密,下面说说,这个加密模块:hashlib。
原则:只要你的输入是固定的,你的输出也一定是固定的。MD5是在hash上更改的,主要做文件的一致性
1、md5加密
import hashlib m = hashlib.md5() # 创建一个MD5对象 m.update(b"luo") # 在python3中需要是2进制的值,所以字符串前加b print(m.hexdigest()) # 以16进制打印MD5值 # 输出 6aaf8fc5fa8975075a1e8a40dc48cebd m.update(b"ahong") print(m.hexdigest()) # 输出 be960d8f1a5d67f846c6dbc0b96eecf02、文件内容MD5值说明:如果我们想得到一个文件所有内容的MD5值,我们所做的方法是循环这个文件,获取每行的MD5值,但是这样生成的MD5值的效率会变慢,因为每一行都需要计算。这样我们还不如直接把文件的所有内容加载出来,直接计算它的MD5值,这样反而快些。
代码如下:
import hashlib m = hashlib.md5() # 创建MD5对象m m.update(b"luo") print(m.hexdigest()) # 输出 d0cd2693b3506677e4c55e91d6365bff m.update(b"ahong") print(m.hexdigest()) # 输出 fe18f0149aadc1c13966429475469886 m2 = hashlib.md5() # 创建MD5对象m2 m2.update(b"luoahong") print(m2.hexdigest()) # 输出 be960d8f1a5d67f846c6dbc0b96eecf0注:由上面的代码可以看出,你读到最后一行的字符串的MD5值跟一下子读取所有内容的MD5值是一样的,这是为什么呢?其实这边update做了一个拼接功能,m.update(b"luo")是返回的字符串"luo"的MD5值,但是到了第二个m.update("ahong")的值并不是"ahong"的字符串的MD5值,它需要拼接前面的字符串,应该是m.update(b"luoahong")的MD5值,所以相当于m.update(b"luo"),m.update(b"ahong") = m.update(b"luo"+b"ahong")。