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

基于FPGA的AES加密解密vivado仿真,verilog開發(fā),包含testbench

這篇具有很好參考價(jià)值的文章主要介紹了基于FPGA的AES加密解密vivado仿真,verilog開發(fā),包含testbench。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

1.算法描述

2.仿真效果預(yù)覽

3.verilog核心程序

4.完整verilog


1.算法描述

? ? ? ? ?AES, 高級(jí)加密標(biāo)準(zhǔn), 是采用區(qū)塊加密的一種標(biāo)準(zhǔn), 又稱Rijndael加密法. 嚴(yán)格上來(lái)講, AES和Rijndael又不是完全一樣, AES的區(qū)塊長(zhǎng)度固定為128比特, 秘鑰長(zhǎng)度可以是128, 192或者256. Rijndael加密法可以支持更大范圍的區(qū)塊和密鑰長(zhǎng)度, Rijndael使用的密鑰和區(qū)塊長(zhǎng)度均可以是128,192或256比特. AES是對(duì)稱加密最流行的算法之一.

? ? ? ?AES算法在對(duì)明文加密的時(shí)候,并不是把整個(gè)明文一股腦的加密成一整段密文,而是把明文拆分成一個(gè)個(gè)獨(dú)立的明文塊,每一個(gè)明文塊長(zhǎng)度128bit。這些明文塊經(jīng)過(guò)AES加密器復(fù)雜處理,生成一個(gè)個(gè)獨(dú)立的密文塊,這些密文塊拼接在一起,就是最終的AES加密的結(jié)果。

? ? ? ?但這里涉及到一個(gè)問(wèn)題,假如一段明文長(zhǎng)度是196bit,如果按每128bit一個(gè)明文塊來(lái)拆分的話,第二個(gè)明文塊只有64bit,不足128bit。這時(shí)候怎么辦呢?就需要對(duì)明文塊進(jìn)行填充(Padding) 。

? ? ? ?需要注意的是,如果在AES加密的時(shí)候使用了某一種填充方式,解密的時(shí)候也必須采用同樣的填充方式。

? ? ? ? 殊的加法和乘法。AES 所用的加法和乘法是基于數(shù)學(xué)(譯者注:近世代數(shù))的域論。尤其是 AES 基于有限域GF(2^8)。?
? ? ? ?GF(2^8)由一組從 0x00 到 0xff 的256個(gè)值組成,加上加法和乘法,因此是(2^8)。GF代表伽羅瓦域,以發(fā)明這一理論的數(shù)學(xué)家的名字命名。GF(2^8) 的一個(gè)特性是一個(gè)加法或乘法的操作的結(jié)果必須是在{0x00 ... 0xff}這組數(shù)中。雖然域論是相當(dāng)深?yuàn)W的,但GF(2^8)加法的最終結(jié)果卻很簡(jiǎn)單。GF(2^8) 加法就是異或(XOR)操作。?
? ? ? ? 然而,GF(2^8)的乘法有點(diǎn)繁難。AES的加密和解密例程需要知道怎樣只用七個(gè)常量 0x01、0x02、0x03、0x09、0x0b、0x0d 和 0x0e 來(lái)相乘。所以我不全面介紹GF(2^8)的乘法,而只是針對(duì)這七種特殊情況進(jìn)行說(shuō)明。?
? 在GF(2^8)中用0x01的乘法是特殊的;它相當(dāng)于普通算術(shù)中用1做乘法并且結(jié)果也同樣—任何值乘0x01等于其自身。?
? ? ? ?現(xiàn)在讓我們看看用0x02做乘法。和加法的情況相同,理論是深?yuàn)W的,但最終結(jié)果十分簡(jiǎn)單。只要被乘的值小于0x80,這時(shí)乘法的結(jié)果就是該值左移1比特位。如果被乘的值大于或等于0x80,這時(shí)乘法的結(jié)果就是左移1比特位再用值0x1b異或。它防止了“域溢出”并保持乘法的乘積在范圍以內(nèi)。?
? ? ? ?一旦你在GF(2^8)中用0x02建立了加法和乘法,你就可以用任何常量去定義乘法。用0x03做乘法時(shí),你可以將 0x03 分解為2的冪之和。為了用 0x03 乘以任意字節(jié)b, 因?yàn)?0x03 = 0x02 + 0x01,因此:?
b * 0x03 = b * (0x02 + 0x01) = (b * 0x02) + (b * 0x01)
? ? ? ?這是可以行得通的,因?yàn)槟阒廊绾斡?0x02 和 0x01 相乘和相加,同理,用0x0d去乘以任意字節(jié)b可以這樣做:

b * 0x0d ? = b * (0x08 + 0x04 + 0x01)?

= (b * 0x08) + (b * 0x04) + (b * 0x01)?

= (b * 0x02 * 0x02 * 0x02) + (b * 0x02 * 0x02) + (b * 0x01)

在加解密算法中,AES MixColumns 例程的其它乘法遵循大體相同的模式,如下所示:?

b * 0x09 ? = b * (0x08 + 0x01)?

= (b * 0x02 * 0x02 * 0x02) + (b * 0x01)b * 0x0b?

= b * (0x08 + 0x02 + 0x01)?

= (b * 0x02 * 0x02 * 0x02) + (b * 0x02) + (b * 0x01)b * 0x0e?

= b * (0x08 +0x04 + 0x02)?

= (b * 0x02 * 0x02 * 0x02) + (b * 0x02 * 0x02) + (b * 0x02) ?

總之,在GF(2^8)中,加法是異或操作。其乘法將分解成加法和用0x02做的乘法,而用0x02做的乘法是一個(gè)有條件的左移1比特位。AES規(guī)范中包括大量有關(guān)GF(2^8)操作的附加信息。

? ? ? ? ?密鑰是AES算法實(shí)現(xiàn)加密和解密的根本。對(duì)稱加密算法之所以對(duì)稱,是因?yàn)檫@類算法對(duì)明文的加密和解密需要使用同一個(gè)密鑰。

AES支持三種長(zhǎng)度的密鑰: 128位,192位,256位

? ? ? ? 平時(shí)大家所說(shuō)的AES128,AES192,AES256,實(shí)際上就是指AES算法對(duì)不同長(zhǎng)度密鑰的使用。三種密鑰的區(qū)別:

? ? ? ? ?從安全性來(lái)看,AES256安全性最高。從性能看,AES128性能最高。本質(zhì)原因是它們的加密處理輪數(shù)不同。

? ? ? ? AES原理:AES是對(duì)數(shù)據(jù)按128位,也就是16個(gè)字節(jié)進(jìn)行分組進(jìn)行加密的,每次對(duì)一組數(shù)據(jù)加密需要運(yùn)行多輪,而輸入密鑰的長(zhǎng)度可以為128、192和256位,也就是16個(gè)字節(jié)、24個(gè)字節(jié)和32個(gè)字節(jié),如果用戶輸入的密鑰長(zhǎng)度不是這幾種長(zhǎng)度,也會(huì)補(bǔ)成這幾種長(zhǎng)度。

  無(wú)論輸入密鑰是多少字節(jié),加密還是以16字節(jié)的數(shù)據(jù)一組來(lái)進(jìn)行的,密鑰長(zhǎng)度的不同僅僅影響加密運(yùn)行的輪數(shù)。

? ? ? ? ?AES算法是一個(gè)對(duì)稱分組密碼算法。數(shù)據(jù)分組長(zhǎng)度必須是 128 bits,使用的密鑰長(zhǎng)度為 128,192 或 256 bits。對(duì)于三種不同密鑰長(zhǎng)度的 AES 算法,分別稱為“AES-128”、“AES-192”、“AES-256”。AES加密算法涉及4種操作:字節(jié)替代(SubBytes)、行移位(ShiftRows)、列混(MixColumns)和輪密鑰加(AddRoundKey)。

?? ? ? ? ?從AES的加密和解密的流程圖中可知:解密算法的每一步分別對(duì)應(yīng)加密算法的逆操作。加解密所有操作的順序正好是相反的,正是這樣才保證了算法的正確性。加解密中每輪的密鑰分別由種子密鑰經(jīng)過(guò)密鑰擴(kuò)展算法得到,算法中16字節(jié)的明文、密文和輪子密鑰都以一個(gè)4x4的矩陣表示。
?

2.仿真效果預(yù)覽

vivado2019.2仿真結(jié)果如下:

基于FPGA的AES加密解密vivado仿真,verilog開發(fā),包含testbench

基于FPGA的AES加密解密vivado仿真,verilog開發(fā),包含testbench

3.verilog核心程序

...........................................................................

wire	[31:0]	w0, w1, w2, w3;
reg	[127:0]	text_in_r;
reg	[127:0]	text_out;
reg	[7:0]	sa00, sa01, sa02, sa03;
reg	[7:0]	sa10, sa11, sa12, sa13;
reg	[7:0]	sa20, sa21, sa22, sa23;
reg	[7:0]	sa30, sa31, sa32, sa33;
wire	[7:0]	sa00_next, sa01_next, sa02_next, sa03_next;
wire	[7:0]	sa10_next, sa11_next, sa12_next, sa13_next;
wire	[7:0]	sa20_next, sa21_next, sa22_next, sa23_next;
wire	[7:0]	sa30_next, sa31_next, sa32_next, sa33_next;
wire	[7:0]	sa00_sub, sa01_sub, sa02_sub, sa03_sub;
wire	[7:0]	sa10_sub, sa11_sub, sa12_sub, sa13_sub;
wire	[7:0]	sa20_sub, sa21_sub, sa22_sub, sa23_sub;
wire	[7:0]	sa30_sub, sa31_sub, sa32_sub, sa33_sub;
wire	[7:0]	sa00_sr, sa01_sr, sa02_sr, sa03_sr;
wire	[7:0]	sa10_sr, sa11_sr, sa12_sr, sa13_sr;
wire	[7:0]	sa20_sr, sa21_sr, sa22_sr, sa23_sr;
wire	[7:0]	sa30_sr, sa31_sr, sa32_sr, sa33_sr;
wire	[7:0]	sa00_mc, sa01_mc, sa02_mc, sa03_mc;
wire	[7:0]	sa10_mc, sa11_mc, sa12_mc, sa13_mc;
wire	[7:0]	sa20_mc, sa21_mc, sa22_mc, sa23_mc;
wire	[7:0]	sa30_mc, sa31_mc, sa32_mc, sa33_mc;
reg		done, ld_r;
reg	[3:0]	dcnt;

....................................................................
aes_key_expand_128 u0(
	.clk(		clk	),
	.kld(		ld	),
	.key(		key	),
	.wo_0(		w0	),
	.wo_1(		w1	),
	.wo_2(		w2	),
	.wo_3(		w3	));

aes_sbox us00(	.a(	sa00	), .d(	sa00_sub	));
aes_sbox us01(	.a(	sa01	), .d(	sa01_sub	));
aes_sbox us02(	.a(	sa02	), .d(	sa02_sub	));
aes_sbox us03(	.a(	sa03	), .d(	sa03_sub	));
aes_sbox us10(	.a(	sa10	), .d(	sa10_sub	));
aes_sbox us11(	.a(	sa11	), .d(	sa11_sub	));
aes_sbox us12(	.a(	sa12	), .d(	sa12_sub	));
aes_sbox us13(	.a(	sa13	), .d(	sa13_sub	));
aes_sbox us20(	.a(	sa20	), .d(	sa20_sub	));
aes_sbox us21(	.a(	sa21	), .d(	sa21_sub	));
aes_sbox us22(	.a(	sa22	), .d(	sa22_sub	));
aes_sbox us23(	.a(	sa23	), .d(	sa23_sub	));
aes_sbox us30(	.a(	sa30	), .d(	sa30_sub	));
aes_sbox us31(	.a(	sa31	), .d(	sa31_sub	));
aes_sbox us32(	.a(	sa32	), .d(	sa32_sub	));
aes_sbox us33(	.a(	sa33	), .d(	sa33_sub	));

endmodule
A268

4.完整verilog

V文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-427188.html

到了這里,關(guān)于基于FPGA的AES加密解密vivado仿真,verilog開發(fā),包含testbench的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Android AES加密解密

    Android AES加密解密

    ?AES算法全稱Advanced Encryption Standard。它是典型的“對(duì)稱加密算法”,主要作用是保證私密信息不被泄露。 一、密鑰 密鑰是AES算法實(shí)現(xiàn)加密和解密的根本,因?yàn)?它對(duì)明文的加密和解密需要使用同一個(gè)密鑰 。 AES支持三種長(zhǎng)度的密鑰:128位,192位,256位。 二、填充 AES算法在對(duì)明

    2024年02月04日
    瀏覽(19)
  • kotlin aes 加密解密

    aes算法對(duì)key的字節(jié)數(shù)有要求 所以對(duì)輸入的key要做填充處理

    2024年02月07日
    瀏覽(15)
  • AES加密解密python實(shí)現(xiàn)

    AES加密解密python實(shí)現(xiàn)

    ????????關(guān)于現(xiàn)代密碼學(xué)算法,可以查看以下博客全面了解 CISSP考試要求里的“應(yīng)用密碼學(xué)”內(nèi)容輔助記憶趣味串講_曉翔仔的博客-CSDN博客 ????????AES的細(xì)節(jié)知識(shí),可以查閱 AES加密算法的詳細(xì)介紹與實(shí)現(xiàn)_TimeShatter的博客-CSDN博客 ?????????AES 加密最常用的模式就是

    2024年02月05日
    瀏覽(22)
  • Golang里的AES加密、解密

    CBC/ECB/CFB 解密方法 輸出結(jié)果: 輸出結(jié)果: 輸出結(jié)果: 首先使用openssl生成公私鑰

    2024年02月11日
    瀏覽(23)
  • java:AES加密和解密

    java:AES加密和解密

    1 前言 對(duì)稱加密,即單秘鑰加密,指加密和解密的過(guò)程中,使用相同的秘鑰,相比于非對(duì)稱加密,因僅有一把鑰匙,故而速度更快,更適合解密大文件(常見于如視頻文件的加密解密中)。AES算法就屬于對(duì)稱加密中的一種。 2 使用 依賴引入: AES加密與解密的工具類封裝: 執(zhí)

    2024年02月11日
    瀏覽(21)
  • 在線AES加密/解密工具

    在線AES加密/解密工具

    在線AES加密/解密工具 http://lzltool.com/AES http://lzltool.com/AES

    2024年02月12日
    瀏覽(32)
  • AES與DES加密解密算法

    AES與DES加密解密算法

    AES(Advanced Encryption Standard,高級(jí)加密標(biāo)準(zhǔn))的出現(xiàn),是因?yàn)橐郧笆褂玫腄ES算法密鑰長(zhǎng)度較短,已經(jīng)不適應(yīng)當(dāng)今數(shù)據(jù)加密安 全性的要求,因此2000年10月2日,美國(guó)政府宣布將比利時(shí)密碼學(xué)家Joan Daemen和Vincent Rijmen提出的密碼算法RIJNDAEL作為高級(jí)加密標(biāo)準(zhǔn)。2001年11月26日,美國(guó)政府

    2024年04月28日
    瀏覽(41)
  • go語(yǔ)言使用AES加密解密

    Go語(yǔ)言提供了標(biāo)準(zhǔn)庫(kù)中的crypto/aes包來(lái)支持AES加密和解密。下面是使用AES-128-CBC模式加密和解密的示例代碼:

    2024年02月06日
    瀏覽(28)
  • 使用Hutool對(duì)AES加密解密

    使用Hutool對(duì)AES加密解密

    1. 前言 AES是一種對(duì)稱加密,所謂對(duì)稱加密就是加密與解密使用的秘鑰是一個(gè)。 2. Maven環(huán)境安裝 3.加密模式 AES 加密最常用的模式就是 ECB模式 和 CBC 模式,當(dāng)然還有很多其它模式,他們都屬于AES加密。ECB模式和CBC 模式倆者區(qū)別就是 ECB 不需要 iv偏移量,而CBC需要。 4.AES加密使用

    2024年02月12日
    瀏覽(20)
  • 【Python】AES 128加密和解密

    【Python】AES 128加密和解密

    AES加密標(biāo)準(zhǔn)又稱為高級(jí)加密標(biāo)準(zhǔn)Rijndael加密法,是美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所NIST旨在取代DES的21世紀(jì)的加密標(biāo)準(zhǔn)。AES的基本要求是,采用對(duì)稱分組密碼體制,密鑰長(zhǎng)度可以為128、192或256位,分組長(zhǎng)度128位,算法應(yīng)易在各種硬件和軟件上實(shí)現(xiàn)。1998年NIST開始AES第一輪分析、測(cè)試和征

    2024年02月13日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包