前提:
今天在爬取一个网页文章保存到数据库的时候,用了文章的链接进行MD5加密作为id。再次调用时会根据id是否存在判断是否存入数据库。
但再次调用后发现相同的文章又存入数据库了,仔细查看后发现id竟然不一样!
开始找问题
做了个测试,创建了一个MD5对象进行多次调用
import hashlib
message = "Hello, World!"
# 创建MD5对象
md5_hash = hashlib.md5()
md5_hash.update(message.encode('utf-8'))
md5_result_1 = md5_hash.hexdigest()
md5_hash.update(message.encode('utf-8'))
md5_result_2 = md5_hash.hexdigest()
md5_hash.update(message.encode('utf-8'))
md5_result_3 = md5_hash.hexdigest()
print("第一次MD5结果:", md5_result_1)
print("第二次MD5结果:", md5_result_2)
print("第三次次MD5结果:", md5_result_3)
测试结果
发现三次MD5结果都不一样!!!
这次创建了三个MD5对象,开始运行
import hashlib
message = "Hello, World!"
# 创建第一个MD5对象
md5_hash = hashlib.md5()
md5_hash.update(message.encode('utf-8'))
md5_result_1 = md5_hash.hexdigest()
# 创建第二个MD5对象
md5_hash = hashlib.md5()
md5_hash.update(message.encode('utf-8'))
md5_result_2 = md5_hash.hexdigest()
# 创建第三个MD5对象
md5_hash = hashlib.md5()
md5_hash.update(message.encode('utf-8'))
md5_result_3 = md5_hash.hexdigest()
print("第一次MD5结果:", md5_result_1)
print("第二次MD5结果:", md5_result_2)
print("第三次次MD5结果:", md5_result_3)
结果竟然又一样!!!
这次尝试了如下代码,发现结果也是一样
import hashlib
message = "Hello, World!"
# 创建MD5对象
md5_hash = hashlib.md5()
md5_hash.update(message.encode('utf-8'))
md5_result_1 = md5_hash.hexdigest()
md5_result_2 = md5_hash.hexdigest()
md5_result_3 = md5_hash.hexdigest()
print("第一次MD5结果:", md5_result_1)
print("第二次MD5结果:", md5_result_2)
print("第三次次MD5结果:", md5_result_3)
总结
每次调用md5_hash.update(message.encode('utf-8'))
会在原有哈希结果的基础上进行更新,而不是重新计算整个消息。
这意味着,如果你多次调用update()
方法并提供相同的输入数据,每次调用都会在当前哈希结果的基础上进行更新,导致最终的哈希值不同。