参考链接: Python hash()
现在有3000条数据,需要插入到数据库中去,使用的是对链接进行MD5加密,
hashcode = md5(str(item_url)) 然后在数据库中设置 hashcode 为UNIQUE索引
3000条数据全部插入完毕,耗时是32s
不使用MD5加密,耗时30秒。(https://www.cnblogs.com/xuchunlin/p/8616604.html)
结论:MD5加密去重对时间影响不大
https://blog.csdn.net/Mao_code/article/details/53976511
https://blog.csdn.net/sangky/article/details/80931040
https://www.aliyun.com/jiaocheng/445004.html
https://www.cnblogs.com/renyuanjun/p/5562084.html
https://blog.csdn.net/katrina1rani/article/details/80907910
https://blog.csdn.net/yangczcsdn/article/details/81327091
https://blog.csdn.net/idkevin/article/details/47444237(Python中巧用set做去重)
http://outofmemory.cn/code-snippet/1191/Python-usage-hashlib-module-do-string-jiami
python中的hashlib和base64加密模块使用实例(https://www.jb51.net/article/54631.htm)
python学习之11 加密解密hashlib hashlib是python专门用来加密解密的库,有md5, sha1, sha224, sha256, sha384, sha512。 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。 什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
(https://blog.csdn.net/lyffly2011/article/details/50733830)
函数 用于计算用户名和密码相加得到的加密值。
def calc_md5(username, password): md5 = hashlib.md5() str_dd = username + password md5.update(str_dd.encode('utf-8')) return md5.hexdigest() 测试源码 import hashlib
test_string = '123456'
md5 = hashlib.md5() md5.update(test_string.encode('utf-8')) md5_encode = md5.hexdigest() print(md5_encode)
sha1 = hashlib.sha1() sha1.update(test_string.encode('utf-8')) sha1_encode = sha1.hexdigest() print(sha1_encode) 输出结果为 e10adc3949ba59abbe56e057f20f883e 7c4a8d09ca3762af61e59520943dc26494f8941b
过程是先把文件根据hash算法转为一个唯一的hash值再进行比较,可适用于图片,txt文件等比较
import hashlib
password = 'password'
#以md5方式加密
hash = hashlib.md5(b'j#$%^&;FD')
# hash = hashlib.md5('password')
hash.update(password.encode('utf-8'))
haword = hash.hexdigest()
print(haword)
import sys
import hashlib
def md5sum(filename):
file_object = open(filename, 'rb')
file_content = file_object.read()
file_object.close()
file_md5 = hashlib.md5(file_content)
return file_md5
if __name__ == "__main__":
hash_text = md5sum('tt.txt')
print(hash_text.hexdigest())
print(len(hash_text.hexdigest()))
注意,需要以二进制的方式读入文件,若写成hashlib.md5(filename),则会变成对字符串filename计算md5
另外对较大文件进行校验,一次性读入太大内容,导致性能低下,故一般读取部分进行处理。
# 大文件的MD5值 def getFileMd5(self, filename):
if not os.path.isfile(filename):
return myhash = hashlib.md5()
f = file(filename, 'rb')
while True:
b = f.read(8096)
if not b:
break
myhash.update(b)
f.close()
return myhash.hexdigest()