版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java實(shí)現(xiàn)AES加密和解密經(jīng)過(guò)三周的不懈努力,終于完成了 AES對(duì)任意格式的文件加密和解 密?,F(xiàn)在將自己的學(xué)習(xí)經(jīng)歷記下來(lái),紀(jì)念自己三周的付出。同時(shí)也感 謝網(wǎng)上的各位大神的博客,讓我學(xué)到了很多。下面就將AES的各個(gè)構(gòu)件的核心代碼粘貼如下,每行代碼都有詳細(xì)的 注釋?zhuān)ackage myAes;/*本類(lèi)完成AES的加密和解密的流程/內(nèi)容參考:* */public class myAes private byte State口口;明文的狀態(tài)表private byte Sbox口口; S 盒子private byte iSbox口口;逆 S盒子private byte key口;密鑰private i
2、nt Nk;/密鑰長(zhǎng)度private int Nr;/ 對(duì)不同的長(zhǎng)度的密鑰不同的輪數(shù)private byte w;/ 密鑰調(diào)度表private byte Rcon口口;輪常數(shù)表private int Nb;明文列數(shù)/構(gòu)造函數(shù)public myAes(byte口 keyBytes,int keySize) =4;/只處理明文是128位為一組if(keySize=128)=4;=10;else if (keySize=192) /密鑰長(zhǎng)度位192位);二6;=12;else if (keySize=256) 二8;二14;二 new byte * 4;二 keyBytes;createSbox()
3、;/創(chuàng)建S盒子的方法createISbox();/ 創(chuàng)建S逆盒子的方法createRcon(); 創(chuàng)建輪常數(shù)數(shù)組的方法keyExtend();/ 密鑰擴(kuò)展的方法/初始化S盒子private void createSbox() =new byte口 0 x63, 0 x7c, 0 x77, 0 x7b, (byte) 0 xf2, 0 x6b, 0 x6f,(byte) 0 xc5, 0 x30, 0 x01, 0 x67, 0 x2b, (byte) 0 xfe,(byte) 0 xd7, (byte) 0 xab, 0 x76 , (byte) 0 xca, (byte) 0 x82, (b
4、yte) 0 xc9, 0 x7d,(byte) 0 xfa, 0 x59, 0 x47, (byte) 0 xf0, (byte) 0 xad,(byte) 0 xd4, (byte) 0 xa2, (byte) 0 xaf, (byte) 0 x9c,(byte) 0 xa4, 0 x72, (byte) 0 xc0 , (byte) 0 xb7, (byte) 0 xfd, (byte) 0 x93, 0 x26, 0 x36, 0 x3f, (byte) 0 xf7, (byte) 0 xcc, 0 x34, (byte) 0 xa5,(byte) 0 xe5, (byte) 0 xf
5、1,0 x71, (byte) 0 xd8, 0 x31,0 x15 ,0 x04, (byte) 0 xc7, 0 x23, (byte) 0 xc3, 0 x18,(byte) 0 x96, 0 x05, (byte) 0 x9a, 0 x07, 0 x12,(byte) 0 x80, (byte) 0 xe2, (byte) 0 xeb, 0 x27,(byte) 0 xb2, 0 x75 , 0 x09, (byte) 0 x83, 0 x2c, 0 x1a, 0 x1b, 0 x6e, 0 x5a,(byte) 0 xa0, 0 x52, 0 x3b, (byte) 0 xd6, (
6、byte) 0 xb3,0 x29, (byte) 0 xe3, 0 x2f, (byte) 0 x84 , 0 x53, (byte) 0 xd1,0 x00, (byte) 0 xed, 0 x20,(byte) 0 xfc, (byte) 0 xb1,0 x5b, 0 x6a, (byte) 0 xcb,(byte) 0 xbe, 0 x39, 0 x4a, 0 x4c, 0 x58, (byte) 0 xcf , (byte) 0 xd0, (byte) 0 xef, (byte) 0 xaa, (byte) 0 xfb,0 x43, 0 x4d, 0 x33, (byte) 0 x8
7、5, 0 x45, (byte) 0 xf9, 0 x02,0 x7f, 0 x50, 0 x3c, (byte) 0 x9f, (byte) 0 xa8 , 0 x51, (byte) 0 xa3, 0 x40, (byte) 0 x8f, (byte) 0 x92,(byte) 0 x9d, 0 x38, (byte) 0 xf5, (byte) 0 xbc, (byte) 0 xb6, (byte) 0 xda, 0 x21, 0 x10, (byte) 0 xff,(byte) 0 xf3, (byte) 0 xd2 , (byte) 0 xcd, 0 x0c, 0 x13, (byt
8、e) 0 xec, 0 x5f,(byte) 0 x97, 0 x44, 0 x17, (byte) 0 xc4, (byte) 0 xa7,0 x7e, 0 x3d, 0 x64, 0 x5d, 0 x19, 0 x73 , 0 x60, (byte) 0 x81,0 x4f, (byte) 0 xdc, 0 x22, 0 x2a,(byte) 0 x90, (byte) 0 x88, 0 x46, (byte) 0 xee,(byte) 0 xb8, 0 x14, (byte) 0 xde, 0 x5e, 0 x0b, (byte) 0 xdb , (byte) 0 xe0, 0 x32,
9、 0 x3a, 0 x0a, 0 x49, 0 x06, 0 x24, 0 x5c,(byte) 0 xc2, (byte) 0 xd3, (byte) 0 xac, 0 x62,(byte) 0 x91, (byte) 0 x95, (byte) 0 xe4, 0 x79 , (byte) 0 xe7, (byte) 0 xc8, 0 x37, 0 x6d, (byte) 0 x8d,(byte) 0 xd5, 0 x4e, (byte) 0 xa9, 0 x6c, 0 x56,(byte) 0 xf4, (byte) 0 xea, 0 x65, 0 x7a, (byte) 0 xae, 0
10、 x08 , (byte) 0 xba, 0 x78, 0 x25, 0 x2e, 0 x1c, (byte) 0 xa6, (byte) 0 xb4, (byte) 0 xc6, (byte) 0 xe8, (byte) 0 xdd,0 x74, 0 x1f, 0 x4b, (byte) 0 xbd, (byte) 0 x8b, (byte) 0 x8a , 0 x70, 0 x3e, (byte) 0 xb5, 0 x66, 0 x48, 0 x03,(byte) 0 xf6, 0 x0e, 0 x61, 0 x35, 0 x57, (byte) 0 xb9,(byte) 0 x86, (
11、byte) 0 xc1, 0 x1d, (byte) 0 x9e , (byte) 0 xe1, (byte) 0 xf8, (byte) 0 x98, 0 x11, 0 x69,(byte) 0 xd9, (byte) 0 x8e, (byte) 0 x94, (byte) 0 x9b,0 x1e, (byte) 0 x87, (byte) 0 xe9, (byte) 0 xce, 0 x55,0 x28, (byte) 0 xdf , (byte) 0 x8c, (byte) 0 xa1, (byte) 0 x89, 0 x0d,(byte) 0 xbf, (byte) 0 xe6, 0
12、x42, 0 x68, 0 x41,(byte) 0 x99, 0 x2d, 0 x0f, (byte) 0 xb0, 0 x54,(byte) 0 xbb, 0 x16 ;/*生成S逆盒子:我的思路:得到s盒中一個(gè)元素的高四位和低四位,分別作為盒子的行和列。然后在把s盒中的行和列轉(zhuǎn)換成十六進(jìn)制存到s逆盒中。*/private void createISbox() int x, y;=new byte1616;for (int i = 0; i 16; i+) for (int j = 0; j 4) & 0 x0f);/得到s盒子元素中的低四位的值y = (int)皿& 0 x0f);高四位
13、和低四位分別做為s逆盒子的行和列,將s盒子的行和列變 成十六進(jìn)制放到s逆盒子中xy = (byte) (16 * i + j);/初始化Rcon輪常數(shù)二維數(shù)組private void createRcon() =new byte口 0 x00, 0 x00, 0 x00, 0 x00 , 0 x01, 0 x00, 0 x00, 0 x00 , 0 x02, 0 x00, 0 x00, 0 x00 , 0 x04, 0 x00, 0 x00, 0 x00 , 0 x08, 0 x00, 0 x00, 0 x00 , 0 x10, 0 x00, 0 x00, 0 x00 , 0 x20, 0 x
14、00, 0 x00, 0 x00 , 0 x40, 0 x00, 0 x00, 0 x00 , (byte) 0 x80, 0 x00, 0 x00, 0 x00 , 0 x1B, 0 x00, 0 x0, 0 x00 , 0 x36, 0 x00, 0 x00, 0 x00 ,;/* RotWord方法:將密鑰wi-1的四個(gè)字節(jié)循環(huán)左移位,*返回移位后的結(jié)果。* */private byte口 RotWord(byte rotWord) byte口 b = new byte4;b0 = rotWord1;b1 = rotWord2;b2 = rotWord3;b3 = rotWord0;re
15、turn b;/* SubWord方法:將密鑰wi-1的四個(gè)字節(jié)分別用S盒子的內(nèi)容進(jìn) 行替換返回替換后的結(jié)果。*/private byte口 SubWord(byte口 subWord) for (int i = 0; i 4 & 0 x0f)(subWordi & 0 x0f);return subWord;/*擴(kuò)展密鑰的方法private void keyExtend() =new byteNb * (Nr + 1)4;for (int i = 0; i Nk; i+) i0 = 4 * i;i1 = 4 * i + 1;i2 = 4 * i + 2;i3 = 4 * i + 3;/對(duì)輪密
16、鑰十六進(jìn)制輸出/*,w+i+:);for(int j=0;j=3;j+)%x,wij);!l .*/byte口 temp = new byte4;for (int i = Nk; i 6 & (i % Nk = 4) temp = SubWord(temp);i0 = (byte) i - Nk0八 temp0);i1 = (byte) i - Nk1八 temp1);i2 = (byte) i - Nk2八 temp2);i3 = (byte) i - Nk3八 temp3);/對(duì)輪密鑰十六進(jìn)制輸出/*w+i+:);for(int j=0;j=3;j+)%x,wij);!l .*/;/byt
17、e數(shù)組轉(zhuǎn)換成String輸出。即到時(shí)候在前臺(tái)輸出密鑰擴(kuò)展的內(nèi) 容public static String BytesToString(String w,byte口 b)String s =;for (int i = 0; i ; i+)String hex = (bi & 0 xFF);if () = 1)hex = 0+hex+n.elsehex=hex+s+=hex;s=w+ +s;return s;/*以下是加密過(guò)程的每個(gè)方法/輪加密private void addRoundKey(int round) for (int r = 0; r 4; r+) for (int c = 0; c
18、 Nb; c+) rc = (byte) rc八 wround * Nb + cr);/字節(jié)替換private void subByte() for (int r = 0; r 4; r+) for (int c = 0; c 4) & 0 x0frc & 0 x0f);/逆字節(jié)替換private void invSubByte() for (int r = 0; r 4; r+) for (int c = 0; c 4) & 0 x0frc & 0 x0f);/行移位 private void shiftRow() byte temp = new byte4Nb;for (int r = 0
19、; r 4; r+) for (int c = 0; c Nb; c+) temprc = rc;/開(kāi)始移位for (int r = 1; r 4; r+) for (int c = 0; c Nb; c+) rc = tempr(r + c) % Nb;/逆行移位private void invShiftRow() byte temp = new byte4Nb;for (int r = 0; r 4; r+) for (int c = 0; c Nb; c+) temprc = rc;/開(kāi)始移位for (int c = 0; c Nb; c+) rc = tempr(c - r + Nb)
20、 % Nb;/列混合private void mixColum() byte口 temp = new byte4Nb;for (int r = 0; r 4; r+) for (int c = 0; c Nb; c+) temprc = rc;for (int c = 0; c Nb; c+) 0c = (byte) (mult2(temp0c)八 multBy03(temp1c)八 mult1(temp2c) mult1(temp3c);1c = (byte) (mult1(temp0c)八 mult2(temp1c)八 multBy03(temp2c) mult1(temp3c);2c =
21、 (byte) (mult1(temp0c)八 mult1(temp1c)八 mult2(temp2c)八multBy03(temp3c);3c = (byte) (multBy03(temp0c)八 mult1(temp1c) 八 mult1(temp2c) 八 mult2(temp3c);/逆列混合private void invMixColum()byte口 temp = new byte4Nb;for (int r = 0; r 4; r+) for (int c = 0; c Nb; c+) temprc = rc; for (int c = 0; c 7 & 0 x01)= 0)
22、/若字節(jié)最高位為0,則就是將b左移1位return (byte) (b 1); else byte c = 0 x1b;return (byte) (b 1)八 c);/字節(jié)*03的結(jié)果,相當(dāng)于b* (02+01)。后面的方法類(lèi)似private byte multBy03(byte b) return (byte) (mult2(b)八 mult1(b);/字節(jié)b*09的結(jié)果private byte multBy09(byte b) return (byte) (mult2(mult2(mult2(b)八 mult1(b);/字節(jié)*0b的結(jié)果private byte multBy0b(byte b) return (byte) (mult2(mult2(mult2(b) 八 mult2(b)八 mult1(b);/字節(jié)*0d的結(jié)果private byte multBy0d(byte b) return (byte) (mult2(mult2(mult2(b)八 mult2(mult2(b) mult1(b);/字節(jié)*0e的結(jié)果private byte multBy0e(byte b) return (byte) (mult2(mult2(mult2(b)八 mult2(mult2
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 項(xiàng)目關(guān)鍵路徑分析與優(yōu)化方案
- 項(xiàng)目收尾階段造價(jià)管理方案
- 建筑材料性能測(cè)試與評(píng)估方案
- 工地安全帽佩戴與管理方案
- 施工現(xiàn)場(chǎng)緊急事故應(yīng)急預(yù)案方案
- 工地安全設(shè)備檢查方案
- 2025年工程地質(zhì)勘察安全操作規(guī)程考核監(jiān)督專(zhuān)項(xiàng)訓(xùn)練試卷附答案
- 焊材庫(kù)管理制度
- 2025年度工業(yè)機(jī)器人系統(tǒng)操作員職業(yè)技能認(rèn)證模擬試卷及答案
- 2025自由貿(mào)易港測(cè)試題含參考答案
- 上海市徐匯區(qū)2026屆初三一模英語(yǔ)試題(含答案)
- 2026年酒店服務(wù)員考試題及答案
- 普速鐵路行車(chē)技術(shù)管理課件 項(xiàng)目二 行車(chē)組織基礎(chǔ)
- 《(2025年)中國(guó)類(lèi)風(fēng)濕關(guān)節(jié)炎診療指南》解讀課件
- 炎德·英才·名校聯(lián)考聯(lián)合體2026屆高三年級(jí)1月聯(lián)考語(yǔ)文試卷(含答及解析)
- 麥當(dāng)勞行業(yè)背景分析報(bào)告
- 中國(guó)心理行業(yè)分析報(bào)告
- 2025至2030中國(guó)生物芯片(微陣列和和微流控)行業(yè)運(yùn)營(yíng)態(tài)勢(shì)與投資前景調(diào)查研究報(bào)告
- 結(jié)核性支氣管狹窄的診治及護(hù)理
- 急腹癥的識(shí)別與護(hù)理
- 2025年新能源電力系統(tǒng)仿真技術(shù)及應(yīng)用研究報(bào)告
評(píng)論
0/150
提交評(píng)論