记一次关于hash.update的疑问

文章比较了两种使用Pythonhashlib库的MD5哈希函数应用方法:一是直接反复计算,二是通过update逐步拼接字符串。作者指出,两种方法在结果上不同,源于update的字符串拼接特性,影响了性能和输出顺序。
摘要由CSDN通过智能技术生成

记一次关于hash.update的疑问

问题如下:

import hashlib

for i in range(1, 100000000):
    res = hashlib.md5(str(i).encode('utf-8')).hexdigest()

    if res[:6] == '6d0bc1':
        print(i, res)

16217    6d0bc15654f2e248e7994fb0ea37762b
32856905 6d0bc135cd9a566e3795c34875c7014f
55599522 6d0bc1d301e3c1a7c8fbad0f1be343ff
65495741 6d0bc15993065bd3d52ca932ce26fa98
77595085 6d0bc16df28a72b1adc744bc00bd52f0

---------------------------------------------------------------------

import hashlib
md5=hashlib.md5()
admin = '6d0bc1'
for i in range(100000000):
    md5.update(str(i).encode('utf-8'))
    if md5.hexdigest()[0:6]==admin:
        print (i, md5.hexdigest())

2020666  6d0bc1153791aa2b4e18b4f344f26ab4
2305004  6d0bc1ec71a9b814677b85e3ac9c3d40
9162671  6d0bc11ea877b37d694b38ba8a45b19c
51302775 6d0bc1a762d786e2f6ef20f705109f10

上述两个程序看起来功能都一样,但是运行出来的结果却各有千秋,细看发现第二个程序中采用了hash.update函数,而update函数的功能是类似于字符串拼接的功能,示例如下:

for i in range(1, 3):
    md5.update(str(i).encode('utf-8'))

而其等价于:

md5.update(str(1).encode('utf-8') + str(2).encode('utf-8'))

所以问题在于第一个程序是通过不停地更新变量值然后进行对应字符串匹配输出,而第二个程序会将后一个字符串与前一个字符串拼接后再进行对应字符串匹配输出,所以导致结果不相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值