我正在使用pythons md5库在Map Reduce程序中将我的名字与一系列nonce一起使用。我试图确定md5摘要的十六进制输出是否至少有5个前导0。 md5输出一个长度为32的字符串,表示散列。我不确定如何将此字符串与十六进制值进行比较。
我知道我需要比较十六进制值以及将哈希输出转换为十六进制值的方法。
我认为要比较的十六进制值应为0x00000100000000000000000000000000
(即31 0' s和前面第5位的1)?但我不知道如何在python中表示这一点。
另外,我如何将十六进制字符串转换为实际的十六进制值?
到目前为止,我从我的程序中打印了一些
10ad52a892674c28ad1de4343e79c232
582d84d589a5fd57df22a8449ac70329
dda932d448b07d048f7e52be4a8234db
04e982c9890a402e248a6e5ef07c9ac4
a86bf64393f1c494a8ac3520c0abf29a
答案 0 :(得分:1)
为什么不使用字符串比较,如
if digest.hexdigest()[:5] == '0' * 5:
# ...
其中digest
是MD5摘要对象。
答案 1 :(得分:0)
要将十六进制字符串转换为整数值,如果指定基数,则可以使用int
:
>>> int("10ad52a892674c28ad1de4343e79c232", 16)
22167591802313671423113693555584516658