ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

BUUCTF 鸡藕椒盐味 wp 海明校验码

2021-10-28 19:01:18  阅读:181  来源: 互联网

标签:R4 校验位 椒盐 R1 R2 R3 海明 验证码 BUUCTF


根据题目,查到海明校验码,也是之前没有接触到的知识,所以在这里整理以下,也供大家参考。

题目:公司食堂最新出了一种小吃,叫鸡藕椒盐味汉堡,售价八块钱,为了促销,上面有一个验证码,输入后可以再换取一个汉堡。但是问题是每个验证码几乎都有错误,而且打印的时候倒了一下。小明买到了一个汉堡,准备还原验证码,因为一个吃不饱啊验证码如下:1100 1010 0000 ,而且打印的时候倒了一下。把答案哈希一下就可以提交了(答案为正确值(不包括数字之间的空格)的32位md5值的小写形式)

1.分析校验位数

从题目可知验证码为110010100000共12位,校验位一般都是在2^n的位置,所以共有4位校验码在1,2,4,8位置

拓展:海明验证码公式:2^r≥k+r+1  (r为校验位 ,k为信息位),如本验证码本来有8位信息码,带入公式可得r=4,所以在1,2,4,8位置添加相应校验码

2.画表

题目中提到打印的时候倒了一下,所以将信息位倒着填入表中

1 2 3 4 5 6 7 8 9 10 11 12 位数
    0   0 1 0   0 0 1 1 信息位(D)
R1 R2   R3       R4         校验位(R)

3.求校验位的值

例如:1由第一位R1来校验;2由第二位R2来校验;由于3=1+2(1和2指的是位数,都是2的n次方)所以3由第一位R1和第二位R2校验,4由第四位R3校验,5和3道理是一样的,5=1+4(2^0+2^2);6=2+4;7=1+2+4,依次类推。得出下表:

海明码位号 占用的校验位号 校验位
1 1 R1
2 2 R2
3 1、2 R1、R2
4 4 R3
5 1、4 R1、R3
6 2、4 R2、R3
7 1、2、4 R1、R2、R3
8 8 R4
9 1、8 R1、R4
10 2、8 R2、R4
11 1、2、8 R1、R2、R4
12 4、8 R3、R4

进行汇总,看每个校验位都确定了哪一位。 

R1:1、3、5、7、9、11

R2:2、3、6、7、10、11

R3:4、5、6、7、12

R4:9、10、11、12

最后用异或运算求出R1、R2、R3、R4、R5的值(以R1为例):

R1=D1⊕D3⊕D5⊕D7⊕D9⊕D11=1

以此类推:R1=1,R2=0,R3=0,R4=0

可以看到P1P2P3P4=0001,R1R2R3R4=1000

可以求得监督位(异或):

0 0 0 1 验证码中的校验码
1 0 0 0 求得的校验码
1 0 0 1 监督位

监督位不为0000,说明接收方生成的校验位和收到的校验位不同,错误的位数是监督位的十进制即9,所以把D9就是题目中提到的错误,得到正确验证码110110100000,然后根据提示MD5hash一下就出来了。

1 import hashlib
2 c="110110100000"
3 md=hashlib.md5()
4 md.update(c.encode("utf8"))
5 flag = md.hexdigest()
6 print(flag)
7 
8 #d14084c7ceca6359eaac6df3c234dd3b

 

套入flag{}即可得到答案flag{d14084c7ceca6359eaac6df3c234dd3b}

标签:R4,校验位,椒盐,R1,R2,R3,海明,验证码,BUUCTF
来源: https://www.cnblogs.com/Yuh1n/p/15477189.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有