国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

AES算法基于FPGA的硬件實(shí)現(xiàn)(3)AES算法的Verilog實(shí)現(xiàn)(完結(jié))

這篇具有很好參考價值的文章主要介紹了AES算法基于FPGA的硬件實(shí)現(xiàn)(3)AES算法的Verilog實(shí)現(xiàn)(完結(jié))。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

本設(shè)計實(shí)現(xiàn)AES加密算法為ecb模式,填充模式未設(shè)置,同時支持AES-128/192/256三種密鑰長度。代碼完全開源,開源鏈接在文章末尾。

1.文件架構(gòu)

下圖為GitHub倉庫中上傳的文件第一級結(jié)構(gòu),第一級為matlab和user,matlab中存儲的是在進(jìn)行列混淆運(yùn)算時查表所用的coe文件,這些文件用來初始化vivado中的bram IP以便于查表運(yùn)算。

fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā)

user

ip:存放使用到的Xilinx ip文件;
src:存放算法設(shè)計的Verilog文件;
sim:存放仿真文件。

matlab

gen_coe.m:用于產(chǎn)生對應(yīng)的coe文件
*.coe:用于初始化IP。

2.代碼說明以及仿真結(jié)果

2.1 代碼結(jié)構(gòu)

為了方便進(jìn)行上板驗(yàn)證,在設(shè)計時我使用串口進(jìn)行了代碼的封裝,因此頂層文件top中添加了串口以及串口協(xié)議解析的部分代碼,這些代碼是和aes算法本身沒有關(guān)系的,所以可以直接忽略。aes算法的核心應(yīng)該是aes_core以及它的子文件。

top

key_filter:按鍵濾波接入外部控制信號(與aes算法無關(guān),建議忽略);
uart_aes_packed:次頂層,該部分將aes代碼和串口解析代碼以及串口接口封裝到了一起(與aes算法無關(guān),建議忽略);

串口解析部分:這部分代碼沒有封裝成子模塊,直接在uart_aes_packed文件中編寫,這個部分的任務(wù)主要是將接收到的串口數(shù)據(jù)解析為密鑰或者明文,比如我設(shè)定首先連續(xù)接收到“key”字符表示數(shù)據(jù)為密鑰,然后下一個字符為“a/b/c”分別來指代當(dāng)前的密鑰長度為128/192/256bit三種模式。
uart_tx/rx:串口接收發(fā)送模塊;
aes_core:aes算法頂層代碼。該部分代碼為實(shí)現(xiàn)重點(diǎn)。

aes_key_expasion:密鑰拓展模塊,實(shí)現(xiàn)同時支持AES128/192/256三種密鑰長度的密鑰拓展。

aes_sbox:實(shí)現(xiàn)同時支持4byte的S盒替換。

aes_encipher:加密模塊,實(shí)現(xiàn)分別支持三種密鑰長度的aes加密;

aes_sbox_128:實(shí)現(xiàn)同時支持16byte的S盒替換;
aes_col_mux:實(shí)現(xiàn)列混淆計算;
輪密鑰加和行移位較為簡單,直接在代碼中實(shí)現(xiàn)未單獨(dú)寫為v文件。

aes_decipher:解密模塊,實(shí)現(xiàn)分別支持三種密鑰長度的aes解密。

aes_inv_sbox_128:實(shí)現(xiàn)同時支持16byte的逆S盒替換;
aes_inv_col_mix:實(shí)現(xiàn)逆列混淆計算。

fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā)
aes_core的rtl原理圖

2.2 代碼仿真結(jié)果

2.2.1 密鑰拓展模塊仿真

fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā)AES-128密鑰拓展結(jié)果(與(二)中c++結(jié)果對比)
fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā)AES-192密鑰拓展結(jié)果(與(二)中c++結(jié)果對比)
fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā)AES-256密鑰拓展結(jié)果(與(二)中c++結(jié)果對比)

2.2.2 加密模塊仿真

fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā)AES-128加密結(jié)果(與(二)中c++結(jié)果對比)
fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā)AES-192加密結(jié)果(與(二)中c++結(jié)果對比)
fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā)AES-256加密結(jié)果(與(二)中c++結(jié)果對比)

2.2.3 解密模塊仿真

fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā) 與輸入明文相同,解密成功。

2.2.4 整體結(jié)果仿真(包含串口解析以及串口收發(fā)部分)

fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā)這部分仿真了串口接入密鑰以及明文數(shù)據(jù)后的結(jié)果,但是使用串口只是為了方便上實(shí)物,我認(rèn)為如果沒有上實(shí)物需求可以完全忽略這部分,而且應(yīng)該有更好的上板驗(yàn)證方法。

2.3 上板驗(yàn)證結(jié)果

fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā)開發(fā)板板連接
fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā)串口發(fā)送的密鑰流

fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā)串口發(fā)送的明文流

fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā)接收到的密文和仿真結(jié)果密文對比

fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā)接收到的解密結(jié)果

2.4 資源消耗

fpga 加密算法 程序,AES加密算法的FPGA實(shí)現(xiàn),算法,fpga開發(fā)aes_core的資源消耗(在vivado 2023.2平臺下,器件為zynq7020的情況下的綜合結(jié)果)

2.5 接口說明

密鑰拓展模塊

module aes_key_expasion
(
    input  wire                         clk                        ,
    input  wire                         rst                        ,

    input  wire        [ 255:0]         key_in                     ,//*按有可能輸入的最大值來輸入(256bit)
    input  wire        [   1:0]         keylen                     ,//*0 1 2
    input  wire                         init                       ,//*indicate the initial key is ready
    
    input  wire        [   3:0]         round                      ,//*indicate the current round
    output wire        [ 127:0]         round_key                  ,//*output the round key
    output wire                         key_ready                  ,//密鑰拓展完成信號
    output wire        [   3:0]         round_num                   //表明當(dāng)前的加密模式總共有多少輪

);

加密模塊

module aes_encipher (
    input  wire clk,
    input  wire rst,

    input  wire next,//開始工作信號,表明明文準(zhǔn)備完畢
    input  wire [3:0] round_num,//需要加密的輪數(shù),表示不同的密鑰長度
    input  wire key_ready,//密鑰準(zhǔn)備完成信號

    input  wire [127:0] round_key,//輪密鑰
    output reg  [3:0]   round,//當(dāng)前輪

    input  wire [127:0] plain,//輸入明文
    output reg [127:0] cipher,//輸出密文
    output reg cipher_ready,//加密完成標(biāo)志

    output wire error       //*密鑰未生成,收到了加密信號
);

解密模塊

與加密模塊基本相同

https://github.com/MaxWei250/aes_fpga 代碼地址
如有幫助希望可以star??文章來源地址http://www.zghlxwxcb.cn/news/detail-801693.html

到了這里,關(guān)于AES算法基于FPGA的硬件實(shí)現(xiàn)(3)AES算法的Verilog實(shí)現(xiàn)(完結(jié))的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包