• 基于分组码的消息验证码的程序实现


    目 录
    摘 要 I
    1 绪论 1
    1.1 课题研究背景和意义 1
    1.2 课题研究现状 1
    2 CBC MAC的特征和基本工作原理 2
    2.1 CBC MAC的特征和码集选择的原则 2
    2.2 CBC MAC生成原理 2
    2.3 CBC MAC模块结构图 3
    3 FPGA和VHDL语言 4
    3.1 概述 4
    3.2 VHDL语言特点 5
    3.2.1 常用硬件描述语言简介 5
    3.2.3 VHDL程序的基本结构 6
    3.3 Quartus II 简介 6
    4 程序实现及结果分析 8
    4.1 设计方案论证 8
    4.2 生成模块设计 8
    4.2.1 设计原理 8
    4.2.2 仿真波形 9
    4.3 校验模块设计 9
    4.3.1 设计原理 9
    4.3.2 仿真波形 10
    4.4 顶层设计 10
    4.4.1 顶层设计原理 10
    4.4.2 顶层设计仿真波形 11
    参考文献 12
    附 录 13
    致 谢 16
    1.2 课题研究现状
    循环码是具有循环移位特性且能纠错的分组码。纠错码的译码是该编码能否得到实际应用的关键所在。译码器往往比编码较难实现,对于纠错能力强的纠错码更复杂。根据不同的纠错或检错目的,循环码译码器可分为用于
    纠错目的和用于检错目的的循环码译码器。任何两个相邻的循环码只有一位数字不同,因此循环码具有可靠性高的优点,在通信、军事等领域中应用非常广泛。由于循环码是无权码,书写和编制都比普通二进制码麻烦,正确的编制是电路设计的关键。
    目前常用的实现CBC MAC编码语言有C语言、Verilog和VHDL语言。但由于VHDL有更强的行为描述能力及其对硬件设计的独立性,从而避开具体的器件结构,从逻辑行为上描述和设计该电子系统使得程序实现较为方便。从以上方面考虑,本设计中采用VHDL程序实现。

    2 CBC MAC的特征和基本工作原理
    2.1 CBC MAC的特征和码集选择的原则
    CBC MAC即分组码的消息验证码是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。但是信息字段和校验字段的长度也要满足一定的要求,即有码集选择原则。
    CBC MAC码集选择的原则:若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CBC MAC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得 V(x)=A(x)g(x)=xRm(x)+r(x);
      其中: m(x)为K-1次信息多项式, r(x)为R-1次校验多项式,
      g(x)称为生成多项式:
      g(x)=g0+g1x1+ g2x2+…+g(R-1)x(R-1)+gRxR
      发送方通过指定的g(x)产生CBC MAC码字,接收方则通过该g(x)来验证收到的CBC MAC码字。
    2.2 CBC MAC生成原理
    经过CBC MAC方式编码的串行发送序列码,可称为CBC MAC码,共有两个部分组成:k位有效信息数据和r位CBC MAC校验码。其中r位CBC MAC校验码是通过k位有效信息序列被一个事先选择的r+1位“生成多项式”相“除”后得到的(r位余数即是CBC MAC校验码)。CBC MAC校验码一般在有效信息发送时产生,拼接在有效信息后被发送;在接收端,CBC MAC码用同样的生成多项式相除,除尽表示无误,弃掉r位CBC MAC校验码,接收有效信息;反之,则表示传输出错,纠错或请求重发。
    实际的CBC MAC校验生成是采用二进制模2算法得到的,即加法不进位,减法不借位,是一种异或操作。生成多项式G(x)是经过严格的数学分析和实验后确定的,有相应的国际标准。

    LIBRARY IEEE;
    USE IEEE.STD_LOGIC_1164. ALL;
    USE IEEE.STD_LOGIC_UNSIGNED. ALL;
    USE IEEE.STD_LOGIC_SIGNED. ALL;
    USE IEEE.STD_LOGIC_ARITH. ALL;
    ENTITY CBC MACm IS
    	PORT ( clk,datald : IN STD_LOGIC;
    		sdata   :IN STD_LOGIC_VECTOR(11 DOWNTO 0);
    		dataCBC MACo:OUT STD_LOGIC_VECTOR(16 DOWNTO 0);
    		hsend :out std_logic);
    end CBC MACm;
    architecture one of CBC MACm is
    	constant multi_coef:std_logic_vector(5 downto 0):="110101";
    	signal cnt:std_logic_vector(4 downto 0);
    	signal sdatam:std_logic_vector(11 downto 0);
    	signal dtemp,rdataCBC MAC:std_logic_vector(16 downto 0);
    	signal st:std_logic:='0';
    begin
    process(clk)
    	variable CBC MACvar:std_logic_vector(5 downto 0);
    begin
    	if (clk'event and clk='1') then
    	if (st='0' and datald='1') then dtemp<=sdata &"00000"; 
            sdatam<=sdata; cnt<= (others=>'0'); hsend<='0'; st<='1'; 
    elsif(st='1' and cnt<12) then cnt<=cnt+1;  
    	if(dtemp(16)='1') then CBC MACvar:=dtemp(16downto11) xor multi_coef;
    		       dtemp<=CBC MACvar(4 downto 0) & dtemp(10 downto 0) & '0';
    			else dtemp<=dtemp(15 downto 0) & '0'; 
    			end if;
    elsif(st='1' and cnt=12) then dataCBC MACo<=sdatam & dtemp(16 downto 12);
    			hsend<='1'; cnt<=cnt+1;
    		elsif(st='1' and cnt=13) then hsend<='0'; st<='0';
    		end if;
    	end if;
    end process;
    end one;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    【学习笔记】AGC035
    .net也能写内存挂
    【嵌入式开发学习】__如何将BootLoader与APP合并成一个固件
    【搭建私人图床】使用LightPicture开源搭建图片管理系统并远程访问
    迅为IMX8MM开发板Yocto系统使用Gstarwmra播放音频和视频
    Unity开发之C#基础-集合(字典)(Dictionary)
    [附源码]java毕业设计面向服装集群企业的个性化定制服务系统
    2023最新最全【内网渗透工具】零基础安装教程
    【实践】一种基于Spring Boot最简单的RESTFul接口版本管理
    ovs dpdk debug
  • 原文地址:https://blog.csdn.net/newlw/article/details/127919769