前言
在解题中,当遇到类似
substr(md5(a),-6,6) == 7788
这样的MD5截断比较的题目时,只有求出a的值才能进行接下来的操作。
一个一个去猜是不可能的,通常使用脚本解决,文末给出实战案例。
PHP循环脚本
<?php for($i=1;$i<999999;$i++) if(preg_match("/^8b184b/",substr(md5($i),-6,6))){ echo $i; } ?>
结果如下
Python多线程脚本
import concurrent.futures import hashlib #要进行比较的字符串 CompareString = '9331c' def md5(text): return hashlib.md5(str(text).encode('utf-8')).hexdigest() def findCode(code): start, end = map(int, code.split(':')) for c in range(start, end): if md5(c)[0:5] == CompareString: //0~5表示c经过加密后的前五个字符 print(c) break ranges = [f"{10000000*i}:{10000000*(i+1)}" for i in range(3)] with concurrent.futures.ThreadPoolExecutor() as executor: executor.map(findCode, ranges)
结果如下: