Python比较两个十六进制值

1 投票
2 回答
2276 浏览
提问于 2025-04-17 23:03

我正在使用Python的md5库来对我的名字和一系列随机数进行哈希处理,这个过程是在一个Map Reduce程序中进行的。我想知道md5生成的哈希值的十六进制输出是否有至少5个前导0。md5的输出是一个长度为32的字符串,表示这个哈希值。我不太确定怎么把这个字符串和一个十六进制值进行比较。

我知道我需要一个十六进制值来进行比较,同时还需要一种方法把哈希输出转换成十六进制值。

我觉得要比较的十六进制值应该是0x00000100000000000000000000000000(也就是前面有31个0,第5位是1)?但我不太确定在Python中怎么表示这个值。

另外,我该怎么把十六进制字符串转换成实际的十六进制值呢?

这是我从程序中打印出来的一些结果:

10ad52a892674c28ad1de4343e79c232
582d84d589a5fd57df22a8449ac70329
dda932d448b07d048f7e52be4a8234db
04e982c9890a402e248a6e5ef07c9ac4
a86bf64393f1c494a8ac3520c0abf29a

2 个回答

0

要把十六进制字符串转换成整数值,你可以使用 int 函数,只需要指定进制就可以了:

>>> int("10ad52a892674c28ad1de4343e79c232", 16)
22167591802313671423113693555584516658
1

为什么不直接用字符串比较呢,就像这样

if digest.hexdigest()[:5] == '0' * 5:
   # ...

这里的 digest 是一个MD5摘要对象。

撰写回答