BUUCTF_鸡藕椒盐味
题目描述:公司食堂最新出了一种小吃,叫鸡藕椒盐味汉堡,售价八块钱,为了促销,上面有一个验证码,输入后可以再换取一个汉堡。但是问题是每个验证码几乎都有错误,而且打印的时候倒了一下。小明买到了一个汉堡,准备还原验证码,因为一个吃不饱啊验证码如下:1100 1010 0000 ,而且打印的时候倒了一下。把答案哈希一下就可以提交了。(答案为正确值(不包括数字之间的空格)的32位md5值的小写形式) 注意:得到的 flag 请包上 flag{} 提交
今天刷题,刷到这道的时候完全没思路搜了wp,虽然都写了是海明校验码但是没写清楚到底怎么找到错误位的,so以我这种新手的角度去写一篇解题思路。
鸡藕椒盐味=奇偶校验位,售价八块钱。想到校验方法的海明校验,数据为8位,校验位为4位。参考文章简单理解海明校验码,不懂得话多看几篇会有收获的。
首先倒置数据得到:000001010011 其中第1位第2位第4位第8位的数据为校验码设为r1,r2,r4,r8列出表格如下
1(r1)=0 | |
2(r2)=0 | |
3(n3) | r2+r1 |
4(r4)=0 | |
5(n5) | r4+r1 |
6(n6) | r4+r2 |
7(n7) | r4+r2+r1 |
8(r8)=1 | |
9(n9) | r8+r1 |
10(n10) | r8+r2 |
11(n11) | r8+r2+r1 |
12(n12) | r8+r4 |
将有r1的数据位异或
校验位r1 :0 = n3^n5^n7^n9^n11
同理 r2 : 0 = n6^n7^n10^n11
r4 : 0 = n5^n6^n7^n12
r8 : 1 = n9^n10^n11^n12
根据上面4个式子可发现r8式子有问题计算结果不为1,则n9,n10,n11三位中有错,又上面3个式子已经校验的n10,n11无错所以排除,即n9出错!
最终数据改为000001011011 倒置后110110100000 再md5加密获取32位小写值
python脚本md5加密:
import hashlib c="110110100000" md=hashlib.md5(c.encode("utf8")).hexdigest() print(md)
得到d14084c7ceca6359eaac6df3c234dd3b 套上flag提交