因为在实习中运用到了用md5对图片进行去重,我发现Python里面直接就有封装好的库hashlib,提供常用的摘要算法,如MD5和SHA1。
摘要算法:又称为哈希算法,散列算法,简单来说就是将一系列原始的数据转化为长度固定的数据串,通常以16进制表示,从而来进行进一步的比对。例如:有一张图片1.jpg,并附上它的摘要为‘1234abcd90ad123458dfaecb12345678’,当有人又上传了一张图片2.jpg,如果这两张图片不同,那么它的摘要就会不同。
摘要算法就是通过预先设定好的函数将输入数据转化为固定长度的摘要,从而判定源数据是否被修改。
特点:(1)完全相同的一段数据,尽管命名不同,不论时间地点(加密算法相同的条件)加密出的32位的字符串完全相同。
(2)但不同的数据可能会得到相同的摘要,称为碰撞,因为是在有限的集合里映射;
(3)逆向解密过程很难,散列能力强,安全。
Example:
通过一小段Python代码来举例说明:
输入的图片文件如下:
其中包含了许多重复的文件。
代码:
import os
import hashlib
def get_md5(file):
file = open(file,'rb')
md5 = hashlib.md5(file.read())
file.close()
md5_values = md5.hexdigest()
return md5_values
file_path = "C:\\wanjingyi\\files"
os.chdir(file_path)
file_list = os.listdir(file_path)
md5_list =[]
for file in file_list:
md5 = get_md5(file)
if md5 not in md5_list:
md5_list.append(md5)
else:
os.remove(file)
执行程序后的结果:
可见,重复的图片已经被去掉了,这里用的是SHA1。