题目
鸡藕椒盐-奇偶校验,作者费心了。。
存储器校验
汉明码的组成
即数据里含有检测数,具有一位纠错能力,设欲检测的二进制代码为n位,为使其具有纠错能力,需增添k位的检测位,组成n+k位的代码为了能准确对错误定位以及指出代码没错,新增添的检测位数k应满足:
eg:若n=4,则k最小为3,检测位的位置为2^i(i=0,1,2,3......),也就是1,2,4位置为检测位。
检测分组,这里我是根据二进制来看检测分组,如果检测位数k=4,第一组的特征为“xxx1”,第二组特征为“xx1x”,第三组特征为“x1xx”,第四组特征为“1xxx”,这里的x取0或1,所以第一组就有(001、011、101、111)也就是1、3、5、7位置的数为第一组检测小组,而1就是检测位,以此类推。
第一组特征 | xxx1 |
第二组特征 | xx1x |
第三组特征 | x1xx |
第四组特征 | 1xxx |
x取0或1
检测的1小组包含的位置 | 1,3,5,7,9,11,...... |
检测的2小组包含的位置 | 2,3,6,7,10,11,14,15,..... |
检测的3小组包含的位置 | 4,5,6,7,12,13,14,15,...... |
检测的4小组包含的位置 | 8,9,10,11,12,13,14,15,24,...... |
例如,欲传递信息为b1b2b3b4(n=4),根据上面的条件可得k=3,则检测位置为1,2,4,安排如下:
二进制序号 | 1 2 3 4 5 6 7 |
名称 | c1 c2 b4 c4 b3 b2 b1 |
c为检测数
计算校验位值:
汉明码的纠错过程
当收到一串汉明码后,首先对其检测,看是否有出错的数据,这里定义一个新的检测位Pi(i=1,2,4,8,......)根据Pi的状态,便可直接指出错误的位置。Pi的计算如下:
如果P3P2P1为000,则没有出错,举个例子,如果为001,则出错位置在1,也就是第一个位置出错,因为是二进制,如果原数是0,出错了改成1就行了(这里算出P后,数值倒过来看,也就是P3P2P1)
解题
此题给我们的验证码为110010100000,其实就是12位的汉明码,又给了提示说汉堡售价八块,也就是数据有8位,那校验位就是4位了,位置就是1,2,4,8,因为这个数是倒过来的,所以验证码按正确的顺序倒着写就是000001010011,根据上面的汉明码纠错,可知P4P3P2P1=1001,也就是第9位出错,把第9位的0改成1就是000001011011,再倒回来就是110110100000,再使用md5加密一下就是d14084c7ceca6359eaac6df3c234dd3b,也就是flag!!!