SEC-DED海明校验码算法研究及其FPGA实现
- 格式:pdf
- 大小:523.97 KB
- 文档页数:4
海明校验码的原理详解2006年12月27日星期三 10:57海明码是一种多重(复式)奇偶检错系统。
它将信息用逻辑形式编码,以便能够检错和纠错。
用在海明码中的全部传输码字是由原来的信息和附加的奇偶校验位组成的。
每一个这种奇偶位被编在传输码字的特定位置上。
实现得合适时,这个系统对于错误的数位无论是原有信息位中的,还是附加校验位中的都能把它分离出来。
推导并使用长度为m位的码字的海明码,所需步骤如下:1、确定最小的校验位数k,将它们记成D1、D2、…、Dk,每个校验位符合不同的奇偶测试规定。
2、原有信息和k个校验位一起编成长为m+k位的新码字。
选择k校验位(0或1)以满足必要的奇偶条件。
3、对所接收的信息作所需的k个奇偶检查。
4、如果所有的奇偶检查结果均为正确的,则认为信息无错误。
如果发现有一个或多个错了,则错误的位由这些检查的结果来唯一地确定。
校验位数的位数推求海明码时的一项基本考虑是确定所需最少的校验位数k。
考虑长度为m位的信息,若附加了k个校验位,则所发送的总长度为m+k。
在接收器中要进行k个奇偶检查,每个检查结果或是真或是伪。
这个奇偶检查的结果可以表示成一个k位的二进字,它可以确定最多2k种不同状态。
这些状态中必有一个其所有奇偶测试试都是真的,它便是判定信息正确的条件。
于是剩下的(2k-1)种状态,可以用来判定误码的位置。
于是导出下一关系:2k-1≥m+k码字格式从理论上讲,校验位可放在任何位置,但习惯上校验位被安排在1、2、4、8、…的位置上。
图5列出了m=4,k=3时,信息位和校验位的分布情况。
图5 海明码中校验位和信息位的定位校验位的确定下面为我增加,意在提出编码方法以助理解(但编码是否主要标准不可知)每行的值等于数值为1的各位码相异或。
如m=4,k=3.数据位前三行,校验位为后三行。
即A=p1⊕D1⊕D3⊕D4=0 得P1=D1⊕D3⊕D4B=P2⊕D2⊕D3⊕D4=0 得P2=D2⊕D3⊕D4C=P3⊕D1⊕D2⊕D3⊕D4=0 得P3=D1⊕D2⊕D3⊕D4 以下计算访求同下k个校验位是通过对m+k位复合码字进行奇偶校验而确定的。
海明码详解(原创通俗版)张健北大青鸟哈尔滨博仁培训中心2010年1月25日一、通过异或来解决:这两天也在研究海明码的问题,把我的理解说给你吧,按照我说的可以顺利得到海明码步骤:一、确定校验码的位数k二、确定校验码的位置三、数据的位置四、求出校验位的值其中还需要一个公式的推导,好了,下面开始:首先,海明码的作用是:在编码中如果有错误,可以表达出第几位出了错,二进制的数据只有0和1,修改起来很容易,求反即可,这需要加入几个校验位。
对于一个m位的数据信息,到底应该加入几个呢?假设需要k个,那么编码之后应该是m+k位,这k个二进制数组成的数据能够表达的数值是2的k次方个,比如需要3个校验位,k=3,3位二进制数从000 、001 、……、111共有8个数值,而这m+k个二进制组成的数据的所有编码中,只有一个是正确的,其他的都是表达了错误的位置信息的,所以2的k次方个编码中去掉正确的那一个,也就是(2的k次方-1),如果这个数值等于m+k,就可以完全表达出出错的位置了,(2的k次方-1)也可以大于m+k,比如:给10个学员进行编号,可以用一位数来编码:学号为0 、1 、2 、3 、……、9 ,也可以用两位数或者五位数,00000 、00001 、00002 、……、00009,但是没有必要用五位呀,只要能满足编码的要求就可以了,所以说我们求出满足条件的最小的k值就可以!下面举例说明:我们要推导出D= 101101这个数字的海明码一、确定校验码的位数k数据的位数m=6,按照上面我们说的公式来计算满足条件的k的最小值2的k次方-1>=m+k即:2的k次方-1>=6+k解此不等式得:满足不等式的最小k=4,也就是D=101101这个数字的海明码应该有6+4=10位,其中原数据6位,校验码4位。
二、确定校验码的位置设这4为校验码分别为P1、P2、P3、P4数据从左到右为D1、D2、……、D6编码后的数据共有6+4=10位,设为M1、M2、……M10校验码Pi(这里i=1,2,3,4)在编码中的位置为2的(i-1)次方,值是这样的1,2,4,8,16……即:P1在M1位置,P2在M2位置,P3在M4位置,P4在M8位置,这里一共有10位,所以排不到M16,见图中“甲”行红色字体M1 M2 M3 M4 M5 M6 M7 M8 M9 M10甲P1 P2 D1 P3 D2 D3 D4 P4 D5 D6乙 1 0 1 1 0 1图1三、数据的位置这个很简单,除了校验码的位置其余的就是数据的位置,填充进去就可以了,见图中“甲”行的蓝色字体,于是可以先把数据信息填进去,见“丙”行,下面就是最关键的部分,求出校验位的值啦!!!四、求出校验位的值这里会用到一个公式,找了好多资料都说了这个公式,但是完全没有必要死记硬背,是有规律的,回顾一下二进制的表达,对于一个4位二进制数,可以表达16个值,0000B~1111B,“B”代表二进制,“D”代表十进制,假定这4位二进制数,从左到右分别为S4、S3、S2、S1,请把脑袋向左歪90°看下图:1D=0001B,所以M1在S1那一行,4D=0100B,所以M4在S3那一行,5D=0101B,这就不能用一个格子来表达了,所以需要S3和S1共同表达,即4+1=5,看图中黄色的部分,是不是M5?看出规律了吧?M后边的数字都可以拆为由2的n次方的数相加来表达,在举一个例子M7:4+2+1=7即:7D=0111B,看图中橙色的部分,都是M7吧!by the way:这个公式在验证纠错的时候还会用得到,我找的网上的很多资料写了好几个公式,看后完全“懵懂”了,其实只需要这一个就可以了,按照我说的这个方法,你只要记住这个公式的推导就可以解决所有问题了,怎么样?强大吧?S1 = M1 ⊕M3⊕M5⊕M7⊕M9S2 = M2 ⊕M3⊕M6⊕M7⊕M10S3 = M4 ⊕M5⊕M6⊕M7S4 = M8 ⊕M9⊕M10 图2(说明:在这个图,根据M后面的数字,按2平方展开,即按蓝色那排(因为这排是Pi的值)有关,然后再把3D=0011B,5D=0101B形式,有1的地方就是它所在的位置。
海明码的检错机制及程序实现浙江省慈溪实验中学 张利波 315300当数字信号在介质中传输时,由于信道热燥声或环境燥声干扰,导致传输错误,这就引出了两个问题:如何检测错误?如何纠正错误?这里将用程序的方法来模拟海明码实现纠错的编码方式。
【海明码介绍】海明码是由R.Hammingy1950年提出的,是一种纠正一比特错的编码,其基本思想是:在k 比特信息上附加r 比特冗余信息(也称校验比特),构成n=k+r 比特的码字,其中每个校验比特和某几个特定的信息比特构成偶校验的关系。
校验比特数r 和信息比特k 满足条件:2^r ≥n+1=k+r+1。
下面用具体例子说明海明码的构造方法。
以k=4为例说明,要满足2^r ≥k+r+1,则有r ≥3,取r=3,则n=k+r=7,这7个比特中的2^k 位置用来放置校验比特R i ,其余为信息比特I i ,如图1所示。
每个信息比特所在位置(下标)都可以表示成2的幂次之和的形式: 7=22+21+20,6=22+21,5=22+20,3=21+20,如图2所示,表格中“√”表示含该项,横向表示信息比特参与校验比特的生成,如信息比特I 4要参与校验比特R 2、R 1、R 0的生成;纵向表示校验比特和信息比特构成的偶校验关系,如 R 2和I 4、I 3、I 2构成的偶校验关系。
由此得到计算校验比特的公式:R 2=I 4+I 3+I 2,R 1=I 4+I 3+I 1,R 0=I 4+I 2+I 1。
接收端对这r 个奇偶关系进行校验,将每个校验比特和与它相关联的信息比特执行相加(异或),相加的结果称为校正因子,校正因子可以通过以下关系式对三个偶关系进行验证:S 2= R 2+I 4+I 3+I 2,S 1= R 1+I 4+I 3+I 1,S 0=R 0+I 4+I 2+I 1。
如果没有错误,则这些校正因子都为0;反之,S 2、S 1、S 0不全为0,而发生错误的比特位置就在S=(S 2S 1S 0)2处,将该比特取反,就得到正确数据。
摘要密码技术作为信息安全的支撑技术,事关国家的根本利益,同时直接影响国家的未来和发展,世界各国都对此予以充分重视。
随着网络的快速发展,信息安全越来越引起人们的关注。
DES(Data Encryption Standard,数据加密标准)加密算法在成为加密标准到今天,经历了长期的考验。
实践证明DES算法的安全性是能够满足大部分的安全要求的。
随着微电子技术的发展,可编程逻辑器件由早期的只读存贮器(PROM)发展到今天十分流行并广泛应用的现场可编程门阵列CPLD/FPGA。
CPLD/FPGA具有体系结构和逻辑单元灵活,集成度高以及实用范围宽等特点,可以实现较大规模的电路,编程也很灵活,而且设计开发周期短,设计制造成本低,开发工具先进,标准产品无需测试,质量稳定以及可实时在线检验等优点,因此被广泛应用于产品的原型设计和产品生产。
所以,应用CPLD/FPGA来设计和实现DES加密算法具有十分重要的现实意义和广阔的应用前景。
概括起来,本文主要完成了以下几方面的主要工作:(1)完成了DES加密系统的整体设计。
整个系统包括DES加密核心模块和函数包模块。
(2)在ALTERA公司的Quartus II环境下用VHDL实现,进行编译、综合和仿真。
关键字:DES;VHDL;FPGAABSTRACTAs the key of the information security,encryption technology influence the nation’s benefit. It will affect national’s future and the development directly. Various countries all regarding this as important technology.With the rapid development of internet, people pay more attention to the information security.DES (Data Encryption Standard) encryption arithmetic has been standing through many tests since it became the encryption standard. It is proved that the security of the DES encryption can satisfy the voluminous needs.With the development of micro-electronic technology, the programmable logic device develops from earlier ROM to CPLD/FPGA which is very popular and extensive applied today. The CPLD/FPGA has the characteristics including flexible system structure and logic unit, high integration and wide application. Especially, the CPLD/FPGA can carry out the more large-scale circuit and can be programmed flexibly. When the engineers use the CPLD/FPGA to design and develop the product, the time is less, the cost is lower, and the tools are more advanced than using other devices because the standard product doesn’t need to test as before, the quality is steadier and the product can be inspected on line. So, the CPLD/FPGA is widely used to design and develop product.Therefore, using the CPLD/FPGA to design and implement the DES encryption arithmetic is very practical and will be popular in many fields. The main contributions of the paper are as follow:(1)Completed the whole design of the DES encryption system .The whole system includes the DES encryption core module and the function package module.(2)Used ALTERA Company platform--Quartus II,VHDL to realize design , compile, synthesis and simulate the design.Key words: DES;VHDL;FPGA目录1 绪论 (1)1.1DES的基本概念及特点 (1)1.2 DES和RSA (2)1.3基于FPGA的DES加密系统的研究背景,意义,及应用前景 (2)1.3.1 DES加密系统现状及发展 (2)1.3.2 FPGA简介 (2)1.4硬件描述语言VHDL简介 (3)1.5EDA工具简介 (4)1.5.1 Quartus Ⅱ开发工具简介 (4)1.5.2 Synplify PRO简介 (5)本章小结 (6)2 DES加密算法原理 (7)2.1DES加密算法原理简介 (7)2.2DES加密原理 (7)2.2.1 初始置换 (8)2.2.2 每轮循环过程 (9)2.2.3 轮密匙的产生 (12)2.3DES算法的安全强度 (14)本章小结 (14)3 加密系统设计 (15)3.1加密系统设计方案 (15)3.2本课题讨论的设计内容 (15)3.2.1 程序函数包的设计 (16)3.2.2轮密钥的生成 (18)3.2.3 S盒的设计 (20)3.2.4 每轮加密单元的设计 (23)3.2.5 DES算法执行模块的顶层设计 (25)本章小结 (27)4 仿真结果及分析 (28)4.1基于Q UARTUSⅡ的仿真 (28)4.2 基于S YNPLIFY PRO的综合 (29)本章小结 (31)结束语 (32)参考文献...........................................错误!未定义书签。
海明码详解①海明校验的基本思想将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。
实质上,海明校验是一种多重校验。
②海明校验的特点它不仅具有检测错误的能力,同时还具有给出错误所在准确位置的能力。
一.校验位的位数校验位的位数与有效信息的长度有关设:N--为校验码的位数 K--是有效信息位 r--校验位(分成r组作奇偶校验,能产生r位检错信息)海明码应满足 N=K+r≤2r-1 若r=3 则N=K+r≤7 所以K≤4二.分组原则`在海明码中,位号数(1、2、3、……、n)为2的权值的那些位,即:1(20)、2(21)、 4(22)、8(23)、…2r-1位,作为奇偶校验位并记作: P1、P2、P3 、P4、…Pr,余下各位则为有效信息位。
例如: N=11 K=7 r=4 相应海明码可示意为位号 1 2 3 4 5 6 7 8 9 10 11P占位P1 P2 × P3 × × × P4 × × ×其中×均为有效信息,海明码中的每一位分别被P1P2P3P4… Pr 中的一至若干位所校验,其规律是:第i位由校验位位号之和等于i的那些校验位所校验如:海明码的位号为3,它被P1P2(位号分别为1,2)所校验海明码的位号为5,它被P1P3(位号分别为 1,4)所校验归并起来: 形成了4个小组,每个小组一个校验位,校验位的取值,仍采用奇偶校验方式确定。
如表2·6 、表2·7所示:三.编码、查错、纠错原理以4位有效信息(b1、b2、b3、b4)和3位校验位(P1、P2、P3)为例: K=4 r=3 海明序号 1 2 3 4 5 6 7海明码 P1 P2 b1 P3 b2 b3 b4根据表2-8可以看到(1)每个小组只有一位校验位,第一组是P1、第二组是P2、第三组是P3。
海明校验码设计实验报告实验目的设计并实现海明校验码,实现对于数据传输中出错信息的检测与纠正功能。
实验原理海明校验码是对于二进制数据进行检错和纠错的一种编码方法。
其基本思想是对数据进行二进制化,并在数据后面加上校验码,以便检查发生的错误,并在发生一些错误的时候进行纠正。
其中,校验码的生成基于原始数据中出现的错误的反转。
为了避免出现错误情况,海明编码使得校验码中的每一位都与原始数据中的多个位置有关。
海明校验码的实现流程包括以下步骤:1. 将要传输的数据转换为二进制形式,并将其划分为多个位。
2. 根据海明编码的规则,计算得出控制位的位置,并将0和1分配给这些位置。
3. 将校验位插入到原始数据的中间,构成海明编码,并发送到接收端。
4. 在接收端,收到海明编码后,进行计算并检查出现的错误情况。
如有错误,则尝试更改应该更改的冗余位以进行自动校正。
实验器材与材料计算机,IDE软件,Python语言。
实验步骤1. 设计海明编码程序。
(1)将要传输的数据分割,初始状态下没有校验码。
(2)计算出每个校验位的数值。
(3)用计算得到的校验码替换掉原来没有校验码的位,以形成海明编码。
2. 制造模拟信道错误的程序。
将字符数据中某些位置的位进行反转模拟数据在传输过程中出现错误的情况。
3. 设计海明编码解码程序。
(1)接收传输过来的海明编码。
(2)计算收到的码字的海明校验码。
(3)如果发现了错误,则进行纠错操作,纠正错误的位数。
实验结果经过测试,我们成功设计并实现了海明编码解码的程序。
我们在编码原始数据后,成功地对编码的数据进行了传输,并通过测试程序检查对于在数据传输过程中出现的错误信息的检测与纠正功能。
同时,在发送者向接收者发送数据的过程中,我们还成功制造了信道错误,以模拟数据传输中出现错误的情况。
在测试程序的帮助下,我们成功地对海明编码的纠错机制进行了测试,并发现其有效性和高可用性。
结论与总结在本次实验中,我们通过使用Python语言和IDE软件成功地设计并实现了海明校验码的程序,实现了对于数据传输中出错信息的检测与纠正功能。
海明编码实现的原理在数据编码中,加入几个校验位,并把数据的每一个二进制位分配在多个奇偶校验组中。
当某一个位出错后,就会引起有关的几个校验组的值发生变化,这样不但可以发现出错,还可以指出是哪一位出错,为自动纠错提供了依据。
码距:是指在一组编码中任何两个编码之间最小的距离。
距离:是指两个编码中相同位值不同的个数。
000,001其距离是1,把这个距离称为海明距离。
码距为d,检验的错误个数为e,纠错的个数为t,它们之间存在的关系:d>=e+1 可检验e个错d>=2t+1 可纠正t个错d>=e+t+1且e>t 可以检验e个错,并纠正t个错。
只讨论海明校验纠一错的情况。
海明校验纠一错需要校验位:2^k-1>=n+k数据位为n,校验位为k,如:数据位为8,k>=4,海明编码的位数=n+k,k一般取满足条件的最小值。
海明校验位放在编码的位置:校验位放在整个编码的2^i位上(i=0,1,2,...,k-1)数据位:D7 D6 D5 D4 D3 D2 D1 D0整个编码怎么放:P1 P2 D7 P4 D6 D5 D4 P8 D3 D2 D1 D00001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100P1=D7异或D6异或D4异或D3异或D1(位置的二进制数从右往左第一位为1的位置上的数进行异或运算)P2=D7异或D5异或D4异或D2异或D1(位置的二进制数从右往左第二位为1的位置上的数进行异或运算)P4=D6异或D5异或D4异或D0(位置的二进制数从右往左第三位为1的位置上的数进行异或运算)P8=D3异或D2异或D1异或D0(位置的二进制数从右往左第四位为1的位置上的数进行异或运算)数据位:01101101 n=8根据2^k-1>=n+k 所以k>=4 取k=4P1 P2 0 P4 1 1 0 P8 1 1 0 10001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100P1=D7异或D6异或D4异或D3异或D1=0异或1异或0异或1异或0=0P2=D7异或D5异或D4异或D2异或D1=0异或1异或0异或1异或0=0P4=D6异或D5异或D4异或D0=1异或1异或0异或1=1P8=D3异或D2异或D1异或D0=1异或1异或0异或1=1海明校验码:000111011101增加一位校验位即可增加检错一个:P0=P1异或P2 异或D7异或P4异或D6异或D5异或D4 异或P8 异或D3异或D2异或D1异或D0=1检二纠一错的编码是:100011101110110111010011P1 P2 D6 P4 D5 D4 D3 P8 D2 D1 D0 1 0 1 1 1 0 1 0 0 1 1求指误字EkEk-1...E1E1=1异或1异或1异或1异或0异或1=1(位置的二进制数从右往左第一位为1的位置上的数进行异或运算)E2=0异或1异或0异或1异或1异或1=0(位置的二进制数从右往左第二位为1的位置上的数进行异或运算)E3=1异或1异或0异或1=1(位置的二进制数从右往左第三位为1的位置上的数进行异或运算)E4=0异或0异或1异或1=0(位置的二进制数从右往左第四位为1的位置上的数进行异或运算)因为E4E3E2E1=0101,说明接收到的海明校验位第5位出错,第1是1,取反得0,正确的海明编码是:10110010011其有效数据位是:1001011 ASCII值=75是字符K。
软考历程(2)——海明码校验这两天学了校验码,在计算机系统基础知识这块,校验还是挺重要的。
这⾥涉及到的校验码有三种:奇偶校验码(Parity Code)海明码(Hamming Code)循环冗余检验码(CyclicRedundancy Check,CRC)1.奇偶校验码这是⼀种最简单最有效的校验⽅法,通过在编码中添加⼀位校验位。
使1的个数为偶数(偶校验)或奇数(奇校验)。
从⽽使码距变为2。
奇校验能够检測代码中奇数位出错的编码,不能够发现偶数位出错的情况。
2.海明码这是利⽤奇偶性来检错和纠错的校验⽅法。
其构成⽅法为:在数据位之间插⼊k个校验位。
求海明码的过程能够分为下⾯⼏个步骤:(1)依据数据位n,确定校验位k, n和k满⾜关系:2k-1≥n+k;(2)设海明码为H1。
H2。
H3。
……H n+k,将校验位依次放在20,21,22,2i-1……的位置上。
(3)将数据位由低位到⾼位依次放在海明码剩余的位置上。
(4)找出每⼀个校验位所校验的数据位,⽅法为:第⼀个校验位隔⼀位校验⼀位。
第⼆个校验位隔两位校验两位,第三个校验位隔三位校验三位……每⼀个校验位都校验它⾃⾝;(5)分别对每⼀个校验位所校验的数据位做抑或运算,结果为校验位的值。
(6)将所得校验位的值填⼊当中,即得海明码。
3.循环冗余校验码它由两部分组成。
左边为信息码。
右边为校验码。
校验码是由信息码产⽣的,求CRC编码时,採⽤模2运算。
多⽤于数据通信领域和磁介质存储领域,在參加的上个中⾕项⽬中就⽤到了CRC校验,那会⼉对于这个东东还认为蛮深奥的呢!。
海明码海明码(Hamming Code)是在电信领域的一种线性检测码,以发明者理查德·卫斯里·海明的名字命名。
海明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据位错误,以侦测并更正单一比特错误。
由于海明编码简单,它们被广泛应用于内存(RAM)电路。
1940年,海明于贝尔实验室(Bell Labs)工作,运用贝尔V型(Bell Model V)电脑,一个周期时间为几秒钟的机电继电器计算机。
输入终端是依靠打孔卡(Punched Card),这不免会产生读取错误。
在平日,特殊代码将发现错误并闪灯(flash lights),使得操作者能够纠正这个错误。
在周末和下班期间,在没有操作者的情况下,机器只会简单地转移到下一个工作。
海明在周末工作,他对于不可靠的读卡机发生错误后,总是必须重新开始项目变得愈来愈沮丧。
在接下来的几年中,他为了解决错误检测的问题,着手开发功能强大的检测算法。
直到1950年,他发表了著名的海明码。
与其他的错误校验码类似,海明码也利用了奇偶校验位的概念,通过在数据位后面增加一些比特,可以验证数据的有效性。
利用一个以上的校验位,海明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位置。
在接受端通过纠错译码自动纠正传输中的差错来实现码纠错功能,称为前向纠错FEC。
在数据链路中存在大量噪音时,FEC可以增加数据吞吐量。
通过在传输码列中加入冗余位(也称纠错位)可以实现前向纠错,但这种方法比简单重传协议的成本要高。
海明码利用奇偶块机制降低了前向纠错的成本。
如果一条信息中包含更多用于纠错的位,且通过妥善安排这些纠错位使得不同的出错位产生不同的错误结果,那么我们就可以找出出错位了。
在一个7位的信息中,单个位出错有7种可能,因此3个错误控制位就足以确定是否出错及哪一位出错了。
海明码SECDED(single error correction, double error detection)版本另外加入一个检测比特,可以侦测两个或以下同时发生的比特错误,并能够更正单一比特的错误。