freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

aes算法的實現(xiàn)與分析課程設(shè)計word格式(參考版)

2024-12-10 13:06本頁面
  

【正文】 在 MixColumns 變換中,乘法和加法都是定義在 GF( 82 )上的。 //第三行左移 2 位 else if(i==3)State[i][j]=temp[4*i+(j+3)%4]。j++) { if(i==1)State[i][j]=temp[4*i+(j+1)%4]。i++) { for(j=0。 } } for(i=1。i4。j4。 int i,j。0x0f=State[i][j] 29 } } } (6) 行移位函數(shù) 功能描述:實現(xiàn)了行的循環(huán)移位操作,變換方法為:第 0 行不動,第 1 行循環(huán)左移一個字節(jié),第 2 行循環(huán)左移 2 個字節(jié),第 3 行循環(huán)左移 3 個字節(jié)。i++) { State[i][j]=AesSbox[State[i][j]]。j++) { for(i=0。 for(j=0。映射方法是:把輸入的字節(jié)高4 位作為 S 盒的行值,低 4 位作為列值,然后取出對應(yīng)行和列的元素作為輸出。i++) // k3 k7 k11k15 { // 所以 i 行 j 列的下標是 4*((round*4)+j)+i 即16*round+4*j+i State[i][j]=(unsigned char)((int)State[i][j]^(int)w[4*((round*4)+j)+i])。j++) // k1 k5 k9 k13 { // k2 k6 k10k14 for(i=0。 //i 行 j 列 //因為密鑰 w 是一列一列排列的,即 k0 k4 k8 k12 for(j=0。 } // for loop } 28 (4) 輪密鑰加 功能描述:在每一輪的加密過程實現(xiàn)了將分組的待加密字符串的第一列與一個密鑰字進行按位異或。 w[4*row+2] = (byte) ( (int) w[4*(rowNk)+2] ^ (int)temp[2] )。 } // w[row] = w[rowNk] xor temp w[4*row+0] = (byte) ( (int) w[4*(rowNk)+0] ^ (int)temp[0] )。amp。 temp[3] = (byte)( (int)temp[3] ^ (int) AesRcon[4*(row/Nk)+3] )。 temp[1] = (byte)( (int)temp[1] ^ (int) AesRcon[4*(row/Nk)+1] )。 if(row%Nk==0) //逢 nk 時,對當前列的前一列作特殊處理 { temp=SubWord(RotWord(temp))。 temp[2]=w[4*row2]。row++) { temp[0]=w[4*row4]。 for(row=Nk。 w[4*row+3] = key[4*row+3]。 w[4*row+1] = key[4*row+1]。rowNk。 實現(xiàn) 代 碼 : Aes::KeyExpansion() { memset(w,0,16*15)。所以需要對密鑰進行擴展。 //字符串拷貝函數(shù),把 keyBytes 的keysize 個字符復(fù)制到 key 中 KeyExpansion()。 實現(xiàn)代碼: Aes::Aes(int keysize,unsigned char* keyBytes) { SetNbNkNr(keysize)。 //8*4 字節(jié), 256 位密 鑰, 14 輪加密 Nr=14。 //6*4 字節(jié), 192 位密鑰, 12 輪加密 Nr=12。 //4*4 字節(jié), 128 位密鑰, 10 輪加密 Nr=10。( 根據(jù)第 2 章 “輪數(shù)的確定 ”一節(jié)) 實現(xiàn)代碼: Aes::SetNbNkNr(int keySize) { Nb=4。 //密鑰移位 } 2. 成員函數(shù)的實現(xiàn): (1) 迭代分組列數(shù)、密鑰列數(shù)、迭代次數(shù)設(shè)置函數(shù) 功能描述:因為 AES 分組長度為 128 bits, Nb 固定為 4。 //密鑰擴展 unsigned char* SubWord(unsigned char* word)。 //列混淆 InvMixColumns()。 //行移位 InvShiftRows()。 //S 盒字節(jié)代換 InvSubBytes()。 //設(shè)置 輪數(shù) AddRoundKey(int round)。 unsigned char w[16*15]。 int Nr。 // 解密函數(shù), input 為 16 位要解密的密文 private: int Nb。 void Cipher()。 Aes()。 實現(xiàn)代碼: class Aes { public: ~Aes()。首先對出現(xiàn)在代碼中的變量和函數(shù)做一下介紹,如表 3, 4, 5 所示,以便讀程序的過程更加方便。如下圖所示: 23 2. AES的 C++實現(xiàn) 對 AES 的 C++實現(xiàn),這里只 做加密過程,解密過程是按相反的順序進行逆變換的加密。 22 以密碼長度選 128bits,設(shè)置為 1234. 文本加密部分能夠入 *.txt 格式的文本,然后 按 128 比特每組 分組進行加密,再 保存為 *. 文本,以和原來文本區(qū)分 。 字符串加密部分,可以選擇密鑰長度:分別為 128 、 19 256 比特,并且可以自己設(shè)置密碼。 下面介紹 AES 的典型 軟件實現(xiàn) 的主要 方法和遇到的問題 。 20 21 第三章 AES 的實現(xiàn) 1. 軟件系統(tǒng)概述 AES 不但具有良好的安全性 ,但 而且適合在多種處理器辦軟件編程上方便快捷的實現(xiàn)。 AddRounddeky(State,Expandedkey[i])。 InvMixCloumns(State)。 對第二個性質(zhì)的解釋有些巧妙。InvSubBytea 作用在單字節(jié)上,而與這些字節(jié)的位置無關(guān)。 (2) 如果調(diào)整相應(yīng)的輪密鑰, AddRoundKey 和 InvMixColumns 的次序可以顛倒。 AddRounddeky(State,Expandedkey[0])。 19 InvShiftRows (State)。 AddRounddeky(State,Expandedkey[1])。 InvShiftRows (State)。 InvSubBytes(State)。 } InvFinalRound(State,Expandedeky[ rN ]) { AddRounddeky(State,Expandedkey[ rN ])。 InvShiftRows (State)。 列表 直接解密算法的輪變換 InvRound(State,Expandedeky[i]) { AddRounddeky(State,Expandedkey[i])。Round 的逆變換記作 InvRound, FinalRound 的逆記作 InvFinalRound,這兩個變換均在列表 中描述。注意這種結(jié)構(gòu)上的一致性不同于采用 Feistel 結(jié)構(gòu)的許多密碼中的組件和結(jié)構(gòu)的一致性, IDEA 也是一樣。為了便于實現(xiàn),通常將惟一的非線性步驟( SubBytes)放在輪變換的第一步(見第四章),我們在設(shè)計時已經(jīng)考慮 18 到這一點。 9. 解密 解密算法可通過直接利用步驟 InvSubBytes、 InvShiftRows、 InvMixCloumns 和AddRoundKey 的逆并倒置其次序而得到,此算法稱為直接解密算法。 (請注意,加法為取模 2 的加法,即逐比特異或) 寫成矩陣形式為 : 00112233ba02 03 01 0101 02 03 01b 01 01 02 03 a03 01 01 02ba? ? ? ???? ? ? ???? ? ? ??? ? ? ?? ? ? ?????? ? ? ? 密鑰加變換 (Add RoundKey) Add RoundKey 稱為輪密鑰加變換, 128 位的 State 按位與 128 位的密鑰 XOR:),(),(),( 321032103210 jjjjjjjjjjjj kkkkbbbbbbbb ??對 j=0, … , L1 輪密鑰加變換很簡 單,卻影響了 State 中的每一位。但由于所乘的因子是三個固定的元素 0 001,所以這些乘法運算仍然是比較簡單的(注意到乘法運算所使用的模多項式為1)( 348 ????? xxxxxm )。 State的每一列 ( jib, ) 1=0, …,3 ; J=0, … , bL 被理解為 GF( 82 )上的多項式,該多項式與常數(shù)多項式 012233)( axaxaxaxa ???? 相乘并模 1)( 4 ?? xxM 約化。乘積矩陣中的每個元素都是一行和一列ShiftRows 變換 ShiftRows 之前 14 0 5d ab 78 10 c1 fd 31 9 11 3f 28 0b 2a 45 ShiftRows 之后 14 0 5d ab 10 c1 fd 78 11 3f 31 9 45 28 0b 2a 圖 2 ShiftRows 變換 17 對應(yīng)元素的乘積之和。 列混合變換 (MixColumns) 列混合變換是一個替代操作,是 AES 最具技巧性的部分。 AES 用以下的矩陣方式描述了這個變換: ??????????????????????????????????????????????????????????????????????????????????????????????????????????0110001111111000011111000011111000011111100011111100011111100011111100017654321076543210bbbbbbbbbbbbbbbb 行位移變換 (ShiftRows) State 的第一行字節(jié)保持不變, State 的第二行字節(jié)循環(huán)左移一個字節(jié), State 的第三行字節(jié)循環(huán)左移兩個字節(jié), State 的第四行循環(huán)左移三個字節(jié)。 符號 (39。 (3) 把 S 盒中的每個字節(jié)記成 ),( 012345678 bbbbbbbbb 。 16 )1( ][2)2( 3488 ????? xxxx XZGF。 (2) 把 S 盒中的每個字節(jié)映射為它在有限域 GF( k2 )中的逆。第一行是 {00}, {01}, {02}, … , {OF};第二行是 {10}, {l1}, … , {1F}等。 S 盒是一個由 16x16 字節(jié)組成的矩陣,包含了 8 位值所能表達的 256 種可能的變換。例如,十六進制數(shù) {84}。 對 w 數(shù)組中下標不為 4 的倍數(shù)的元素,只是簡單地異或,其邏輯關(guān)系為: ]4[]1[][ ???? iwiwiw ( i 不為 4 的倍數(shù)) 對 w 數(shù)組中下標為 4 的倍數(shù)的元素,采用如下的計算方法: ( 1) 將一個字的四個字節(jié)循環(huán)左移一個字節(jié),即將字 ],[ 3210 bbbb 變?yōu)閉,[ 3210 bbbb ; ( 2) 基于 S 盒對輸入字中的每個字節(jié)進行 S 代替: ( 3) 將步驟 1 和步驟 2 的結(jié)果再與輪常量 Rcon[i]相異或。 表 514 RC[i] i 1 2 3 4 5 6 7 8 9 10 RC[i] 01 02 04 08 10 20 40 80 1b 36 表 515 Rcon[i] 15 I 1 2 3 4 5 Rcon[i] 01000000 020
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1