当前位置: 首页 > news >正文

基于FPGA的AES加解密系统verilog实现,包含testbench和开发板硬件测试

目录

1.课题概述

2.系统测试效果

3.核心程序与模型

4.系统原理简介

4.1 字节替换(SubBytes)

4.2 行移位(ShiftRows)

4.3 列混合(MixColumns)

4.4 轮密钥加(AddRoundKey)

4.5 逆字节替换(InvSubBytes)

4.6 逆行移位(InvShiftRows)

4.7 逆列混合(InvMixColumns)

4.8 轮密钥加(AddRoundKey)

5.完整工程文件


1.课题概述

       基于FPGA的AES加解密系统verilog实现,包含testbench和开发板硬件测试。输入待加密数据,密钥,输出加密数据,然后通过解密模块输出解密后的原数据。

2.系统测试效果

仿真测试

硬件测试

在实际测试过程中,如果你的开发板和我的不一样,可以参考本博客置顶文章进行硬件配置修改:

FPGA系统开发板调试过程不同芯片的移植步骤介绍_紫光fpga移植软核的步骤-CSDN博客

通过这个链接的步骤,可以实现不同开发板上的系统调试。

3.核心程序与模型

版本:vivado2022.2

`timescale 1ns / 1psmodule tops_hw(
input             i_clk,
input             i_rst,
output            led);reg[15:0]cnt;
always @(posedge i_clk or negedge i_rst)
beginif(~i_rst)begincnt<=16'd0;end elsebeginif(cnt==16'd60000)cnt<=16'd1;elsecnt<=cnt+16'd1;end
endreg       start;
reg[127:0]key;
reg[127:0]text_in; always @(posedge i_clk or negedge i_rst)
beginif(~i_rst)beginstart   <=1'd0;key     <=128'd0;text_in <=128'd0;end elsebeginif(cnt==16'd1 | cnt==16'd20001 | cnt==16'd40001)start   <=1'd1;elsestart   <=1'd0;if(cnt==16'd1)begintext_in <= 128'h0123_4567_89ab_cdef_0123_4567_89ab_cdef;key     <= 128'h0000_0000_0000_0000_1111_0000_0000_0000;endif(cnt==16'd20001)begintext_in <= 128'h0123_4567_0000_cdef_0123_4567_89ab_cdef;key     <= 128'h0000_0000_1111_0000_1111_0000_0000_0000;endif(cnt==16'd40001)begintext_in <= 128'h0123_4560_0000_c11f_0123_4567_89ab_cdef;key     <= 128'h0000_0000_1111_0000_1111_0000_0111_0000;endend
endwire           done;
wire	[127:0]	text_out;
wire           done2;
wire	[127:0]	text_out2;aes_tops aes_tops_jiam(.Clock       (i_clk),.Reset       (~i_rst),.loads       (start),.enc_dec     (1'b0),.din         (text_in),.FEK         (key),.Ready       (),.dout        (),.Ready_Valid (done),.douts_Valid (text_out));aes_tops aes_tops_jiem(.Clock       (i_clk),.Reset       (~i_rst),.loads       (done),.enc_dec     (1'b1),.din         (text_out),.FEK         (key),.Ready       (),.dout        (),.Ready_Valid (done2),.douts_Valid (text_out2));assign led= done2;ila_0 your_instance_name (.clk(i_clk), // input wire clk.probe0({start,text_in,key,done,text_out,done2,text_out2}) // input wire [519:0] probe0
);endmodule
00X6_002m

4.系统原理简介

       AES是一种分组密码算法,它将明文数据分成固定大小的分组(通常为 128 位),并使用一个密钥对这些分组进行加密。AES支持的密钥长度有128位、192位和256位,不同的密钥长度对应不同的加密轮数,分别为10轮、12轮和14轮。

       AES加密过程主要包括初始轮、多轮迭代和最终轮。每一轮迭代都包含四个基本操作:字节替换(SubBytes)、行移位(ShiftRows)、列混合(MixColumns)和轮密钥加(AddRoundKey)。

4.1 字节替换(SubBytes)

      字节替换操作是一个非线性替换操作,它将状态矩阵中的每个字节通过一个固定的S盒进行替换。S 盒是一个16×16的字节替换表,它是通过有限域GF (2^8)上的逆运算和仿射变换得到的。数学公式为:

4.2 行移位(ShiftRows)

       行移位操作将状态矩阵的每一行循环左移不同的位数。第一行保持不变,第二行左移1个字节,第三行左移2个字节,第四行左移3个字节。数学公式为:

4.3 列混合(MixColumns)

       列混合操作是一个线性变换,它将状态矩阵的每一列与一个固定的矩阵进行矩阵乘法运算。这个固定矩阵是在有限域GF (2^8)上定义的。数学公式为:

4.4 轮密钥加(AddRoundKey)

轮密钥加操作将状态矩阵与当前轮的轮密钥进行逐位异或运算。数学公式为:

        AES解密过程是加密过程的逆过程,它包括初始轮、多轮迭代和最终轮。每一轮迭代包含逆字节替换(InvSubBytes)、逆行移位(InvShiftRows)、逆列混合(InvMixColumns)和轮密钥加(AddRoundKey)。

4.5 逆字节替换(InvSubBytes)

逆字节替换操作是字节替换操作的逆操作,它使用逆S盒进行替换。数学公式为:

4.6 逆行移位(InvShiftRows)

逆行移位操作是行移位操作的逆操作,它将状态矩阵的每一行循环右移不同的位数。数学公式为:

4.7 逆列混合(InvMixColumns)

      逆列混合操作是列混合操作的逆操作,它将状态矩阵的每一列与一个固定的逆矩阵进行矩阵乘法运算。数学公式为:

4.8 轮密钥加(AddRoundKey)

轮密钥加操作与加密过程中的轮密钥加操作相同,都是逐位异或运算。

5.完整工程文件

v

v

相关文章:

  • 【ESP32-IDF笔记】06-触摸传感IO配置
  • 基于尚硅谷FreeRTOS视频笔记——6—滴答时钟—上下文切换
  • OpenAI重返巅峰:o3与o4-mini引领AI推理新时代
  • Qt QThread 两种线程管理方法
  • 【 解决Cline插件无法激活及DeepSeek模型请求卡顿或者无法加载问题】
  • C++ `unique_ptr` 多线程使用
  • SpringAI+DeepSeek大模型应用开发——5 ChatPDF
  • 深入解析C++驱动开发实战:优化高效稳定的驱动应用
  • Spring_MVC 快速入门指南
  • 汽车免拆诊断案例 | 2011款雪铁龙世嘉车刮水器偶尔自动工作
  • wordpress 垂直越权(CVE=2021-21389)漏洞复现详细教程
  • 初识Redis · C++客户端string
  • 先导木工机床与养老领域的探索之旅
  • 仿腾讯会议项目实现——设置配置文件
  • 【特殊场景应对1】视觉设计:信息密度与美学的博弈——让简历在HR视网膜上蹦迪的科学指南
  • 6.7.图的深度优先遍历(英文缩写DFS)
  • EnlightenGAN:低照度图像增强
  • 【计算机网络 | 第一篇】计算机网络基础知识
  • 基于springBoot+vue的PC 端学习系统(源码+lw+部署文档+讲解),源码可白嫖!
  • L2-018 多项式A除以B
  • 明查|俄罗斯征兵部门突袭澡堂抓捕壮丁?
  • 人民日报头版:各地扎实开展学习教育,一体推进学查改
  • 俄罗斯与乌克兰互换246名在押人员
  • 韩国一战机飞行训练中掉落机炮吊舱和空油箱
  • 两名中国公民在墨尔本被海浪卷走,我领馆发文提醒
  • 法官颁布紧急临时禁止令,中国留学生诉美国政府“首战胜利”