🏆选手t觉得ACM太无聊了,没有挑战性——因为题目都是人出的,只要是能出出来的题都是可做题。于是他决定转行去隔壁打CTF。
显然,CTF对于🏆选手t来说也没有任何挑战性——因为题目都是人出的,只要是能出出来的题都是可做题。不过,CTF中有一类题,虽然可做,但是耗费时间。
比如,给你一个抠掉了n个字符的明文(由小写字母和数字构成),告诉你这串明文用md5或其他基于哈希方法加密后的密文,要你还原出完整的明文,于是你需要写一个运算

次的程序暴力枚举所有的可能性。
假设电脑一秒大概可以运行10000000次,那么如果明文被抠去了7个字符,那就需要运行

次,大概需要

秒,也就是两个多小时。
🏆选手t的时间宝贵,他当然是不屑于做这种题的。
现在,有一道CTF题,经过
🏆选手t优秀的代码审计后,翻译如下:它在代码中内嵌了一个字符串s。你可以传入一个字符串参数t,如果s=t,代码会直接停止执行。当hash(s)=hash(t),代码会抛出一个{flag},否则就什么也不做。
其中
%3D%5Csum_0%5E%7Blen(x)-1%7Dx_i%5Ctimes%20p%5Ei%20%5Cmod%20m)
,字符串的起始下标为0,len(x)代表字符串x的长度,

代表字符串x第i位字符的ASCII码的值。mod代表求余数(取模)运算。
🏆选手t审计完代码后,理所当然地将后续的计算抛给了你。现在,他会给你hash函数用到的参数p、m,以及代码中的字符串s。为了得到🏆选手t想要的{flag},你需要尽快计算出需要的字符串t。
所有输入输出字符串内的字符ASCII码取值范围为[33,126]。