




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
北京郵電大學(xué)畢業(yè)設(shè)計(jì)緒論1.1論文背景信息安全是一個(gè)綜合性的交叉學(xué)科領(lǐng)域,廣泛涉及數(shù)學(xué)、密碼學(xué)、計(jì)算機(jī)、通信控制、人工智能、安全工程、人文科學(xué)等諸多學(xué)科,是近幾年迅速發(fā)展的一個(gè)熱點(diǎn)學(xué)科領(lǐng)域。信息對(duì)抗和網(wǎng)絡(luò)安全是信息安全的核心熱點(diǎn),它的研究和發(fā)展又將刺激、推動(dòng)和促進(jìn)相關(guān)學(xué)科的研究與發(fā)展。網(wǎng)絡(luò)技術(shù)的快速發(fā)展,給我們的生活帶來(lái)了方便,提高了我們的工作效率,豐富了我們的生活,但同時(shí),安全問(wèn)題也時(shí)刻困擾著我們。連接在網(wǎng)絡(luò)上的計(jì)算機(jī)隨時(shí)都有被黑客攻擊的可能,在網(wǎng)絡(luò)上收發(fā)的文件也有可能被黑客截獲,而這種不安全的因素是TCP/IP協(xié)議所固有的,所以為了保護(hù)重要的文件安全,我們必須給重要的文件加密。本論文講述了加密技術(shù)的實(shí)現(xiàn)。通過(guò)數(shù)據(jù)加密,人們可以有效地保證個(gè)人數(shù)據(jù)的安全,以及在通信線路上的內(nèi)容不被泄露,而且還可以檢驗(yàn)傳送信息的完整性。1.2主要工作實(shí)現(xiàn)文件簡(jiǎn)單的加密和解密,保護(hù)數(shù)據(jù)安全。實(shí)現(xiàn)文件校驗(yàn)功能,用于驗(yàn)證文件的完整性和正確性。通過(guò)覆蓋技術(shù)使刪除的文件不可恢復(fù),實(shí)現(xiàn)文件粉碎功能。設(shè)計(jì)一套完整的加密體系,在核心代碼運(yùn)行前優(yōu)先取得程序控制權(quán)做校驗(yàn)工作,保護(hù)軟件的安全。1.3本文結(jié)構(gòu)本文第一部分主要以緒論為主,說(shuō)明了文章的研究背景、主要工作,概要說(shuō)明了所做的工作。第二部分主要是文件加密解密的相關(guān)知識(shí)的介紹,介紹了AES算法的原理。第三部分?jǐn)⑹隽嗽O(shè)計(jì)的思路、重點(diǎn)。第四部分為設(shè)計(jì)結(jié)果及分析,將勞動(dòng)成果展現(xiàn)給大家。第五部分為結(jié)論、致謝和參考文獻(xiàn),列出了文章的參考文獻(xiàn)和引用文獻(xiàn),反映本文研究工作的背景和依據(jù)。2AES介紹2.1AES概述AES是一個(gè)迭代的、對(duì)稱密鑰分組的加密算法,即它的加密和解密過(guò)程都使用同一個(gè)密鑰。AES分組密碼接受一個(gè)128位的明文,并且在一個(gè)128、192、256位秘密密鑰的控制下產(chǎn)生一個(gè)128位的密文。它是一個(gè)替代-置換網(wǎng)絡(luò)的設(shè)計(jì),并且?guī)в幸粋€(gè)稱為輪的步驟的集合,其中輪數(shù)可以為9、11或者13(對(duì)應(yīng)于128、192或者256位的密鑰),這樣可以將明文映射為密文。一輪AES由下面的4步組成:(1)字節(jié)替代(SubBytes):用一個(gè)S盒完成分組中的按字節(jié)的代換。(2)行移位(ShiftRows):一個(gè)簡(jiǎn)單的置換。(3)列混淆(MixColumns):一個(gè)利用在域GF()上的算術(shù)特性的代換。(4)輪密鑰加(AddRoundKey):利用當(dāng)前分組和擴(kuò)展密鑰的一部分進(jìn)行按位XOR。每一輪分別使用它自己的128位輪密鑰(roundkey),它是由秘密密鑰通過(guò)一個(gè)稱為密鑰調(diào)度(keyschedule)的過(guò)程處理而產(chǎn)生的。不要低估一個(gè)設(shè)計(jì)合理的密鑰調(diào)度方案的重要性。它把密鑰的熵散發(fā)給每一個(gè)輪密鑰。如果熵沒(méi)有被很好地傳播,就會(huì)產(chǎn)生各種麻煩,例如等價(jià)密鑰、相關(guān)密鑰以及其他類似的分別征服攻擊(distinguishingattack)。AES把128位的輸入看作是一個(gè)由16個(gè)字節(jié)組成的向量,并用一個(gè)4x4的列矩陣(big-endian)的形式來(lái)組織,叫做狀態(tài)(state)。即第1個(gè)字節(jié)映射為,第3個(gè)字節(jié)映射為,第4個(gè)字節(jié)為,第16個(gè)字節(jié)映射為,如圖2-1所示。A0.0A0.1A0.2A0.3A1.0A1.1A1.2A1.3A2.0A2.1A2.2A2.3A3.0A3.1A3.2A3.3圖2-1AES的狀態(tài)示意圖整個(gè)AES分組密碼由下面的步驟組成:(1)AddRoundKey(round=0)(2)forround=1到Nr-1(9、11或者13,這取決于密鑰的大小)doSubBytesShiftRowsMixColumnsAddRoundKey(round)(3)SubBytes(4)ShiftRows(5)AddRoundKey(Nr)2.2輪密鑰加(AddRoundKey)輪函數(shù)的這一步是把輪密鑰加到狀態(tài)中(在GF(2)中)。它執(zhí)行了16個(gè)并行的把密鑰加到狀態(tài)中的運(yùn)算。GF(2)的加法是通過(guò)異或運(yùn)算來(lái)完成的,如圖2-2所示。圖2-2AESAddRoundKey函數(shù)其中的K炬陣是一個(gè)輪密鑰并且對(duì)每一輪都有一個(gè)惟一的密鑰。因?yàn)槊荑€的加法是一個(gè)簡(jiǎn)單的異或,所以它常實(shí)現(xiàn)為在32位軟件中從列開(kāi)始的一個(gè)32位的異或操作。2.3字節(jié)替代(SubBytes)輪函數(shù)的SubBtes步驟是用來(lái)執(zhí)行SPN中的非線性混清步驟的。它把16個(gè)字節(jié)的每一個(gè)都并行地映射為一個(gè)新的字節(jié),這是通過(guò)一個(gè)兩步驟的替代操作來(lái)完成的,如圖2-3所示。圖2-3AESSubBytes函數(shù)該映射變化是一個(gè)簡(jiǎn)單的查表操作,AES定義了一個(gè)S盒,如表2.1所示,它是由16*16個(gè)字節(jié)組成的矩陣,包含了8位值所能表達(dá)的256種可能的變換。State中每個(gè)字節(jié)按照如下的方式映射為一個(gè)新的字節(jié):把該字節(jié)的高4位作為行值,低4位作為列值,然后取出S盒中對(duì)應(yīng)行列的元素作為輸出。例如,十六進(jìn)制值95所對(duì)應(yīng)的S盒的行值是9,列值是5,S盒中在此位置的值是2A。相應(yīng)地,95被映射為2A。表2.1AES的S盒y0123456789ABCDEFx0637C777BF26B6FC53001672BFED7AB761CA82C97DFA5947F0ADD4A2AF9CA472C02B7FD9326363FF7CC34A5E5F171D83115304C723C31896059A071280E2EB27B275409832C1A1B6E5AA0523BD6B329E32F84553D100ED20FCB15B6ACBBE394A4C58CF6D0EFAAFB434D338545F9027F503C9FA8續(xù)表2.1AES的S盒751A3408F929D38F5BCB6DA2110FFF3D28CD0C13EC5F974417C4A77E3D645D1973960814FDC222A908846EEB814DE5E0BDBAE0323A0A4906245CC2D3AC639195E479BE7C8376D8DD54EA96C56F4EA657AAE08CBA78252E1CA6B4C6E8DD741F4BBD8B8AD703EB5664803F60E613557B986C11D9EEE1F8981169D98E949B1E87E9CE5528DFF8CA1890DBFE6436841992D0FB054BB16S盒被設(shè)計(jì)成能防止已有的各種密碼分析攻擊。AES的開(kāi)發(fā)者特別尋求在輸入位和輸出位之間幾乎沒(méi)有相關(guān)性的設(shè)計(jì),且輸出值不能通過(guò)利用一個(gè)簡(jiǎn)單的數(shù)學(xué)函數(shù)變換輸入值所得到。當(dāng)然,S盒必須是可逆的,即逆S盒[S盒(a)]=a。然而,因S盒(a)=逆S盒(a)不成立,在這個(gè)意義上S盒不是自逆的。例如,S盒(95)=2A,但逆S盒(95)=AD。2.4行移位(ShiftRows)ShiftRows這一步對(duì)狀態(tài)中的每一行分別進(jìn)行向左循環(huán)移動(dòng)0、1、2和3個(gè)位置。它是完全線性的,如圖2-4所示。圖2-4AESShiftRows函數(shù)在實(shí)際應(yīng)用中,我們將會(huì)看到這是通過(guò)重命名(renaming)來(lái)實(shí)現(xiàn)的而不是一個(gè)實(shí)際的移動(dòng)。也就是說(shuō),通過(guò)對(duì)字節(jié)移動(dòng)的替代,我們只是簡(jiǎn)單地在得到它們的地方對(duì)它們進(jìn)行修改就可以。在32位的軟件中,我們可以很容易地把ShiftRows和SubBytes以及MixColumns混合,而不用來(lái)回交換字節(jié)。2.5列混淆(MixColumns)MixColumns這一步對(duì)狀態(tài)中的每一列乘上一個(gè)4*4的變換,這個(gè)變換就是所謂的極大距離可分碼(MaximallyDistanceSeparable,MDS)。這一步的目的是擴(kuò)大差別并且讓輸出線性依賴于其他輸人。即如果一個(gè)單一的輸入字節(jié)在兩個(gè)明文中發(fā)生了改變(輸入中所有其他的字節(jié)沒(méi)變),這個(gè)改變將盡可能快地傳播到狀態(tài)中的其他字節(jié)中去,如圖2-5所示。圖2-5AESMixColumns列混淆變換和行移位變換使得在經(jīng)過(guò)幾輪變換后,所有的輸出位均與所有的輸入位相關(guān)。2.6密鑰調(diào)度(KeySchedule)密鑰調(diào)度是負(fù)責(zé)把輸人的密鑰轉(zhuǎn)化成所需的Nr+1個(gè)128位輪密鑰。圖2-6中的算法將計(jì)算輪密鑰。輸入:Nk密鑰中的32位字的個(gè)數(shù)(4、6或者8)w4×(Nr+1)個(gè)32位字的數(shù)組輸出:w使用密鑰來(lái)設(shè)顯一個(gè)數(shù)組(1)以big-endian的格式把秘密密鑰預(yù)加載到w的第一個(gè)Nk字中(2)i=Nk(3)while(i<4*(Nr+1))do(1)temp=w[i-1](2)if(imodNk=0)temp=SubWord(RotWord(temp))XORRcon[i/Nk](3)elseif(Nk>6andimodNk=4)temp=SubWord(temp)(4)w[i]=w[i-Nk]xortemp(5)i=i+1圖2-6AES密鑰調(diào)度密鑰調(diào)度還需要兩個(gè)額外的函數(shù)。SubWord()的輸人為32位并且并行地把每個(gè)字節(jié)發(fā)送給AES的SubBytes替代表中。RotWord()把字向右循環(huán)移動(dòng)8位。Rcon表是一個(gè)數(shù)組,它只存儲(chǔ)了多項(xiàng)式g(x)=x的前10個(gè)幕模AES多項(xiàng)式的最高字節(jié)。3系統(tǒng)設(shè)計(jì)3.1設(shè)計(jì)概述此次畢業(yè)設(shè)計(jì)采用的開(kāi)發(fā)工具是VisualStudio2010,所選用的開(kāi)發(fā)語(yǔ)言是C++,軟件名稱為:文件管家。目前網(wǎng)絡(luò)上,文件加密與解密的軟件比較多,功能也比較強(qiáng)大,之所以會(huì)選擇“實(shí)現(xiàn)文件簡(jiǎn)單的加密和解密”這個(gè)題目,并且去設(shè)計(jì)一款這方面的軟件,主要有兩方面原因:一是因?yàn)橐恢睂?duì)信息安全比較感興趣,也雜七雜八的看過(guò)一些這方面的資料,想通過(guò)這次畢業(yè)設(shè)計(jì),學(xué)以致用;二是因?yàn)橹坝眠^(guò)一些文件加解密的軟件,但是感覺(jué)操作比較復(fù)雜,當(dāng)然它們的功能都比較強(qiáng)大,但作為普通用戶,我們可能并不需要那么強(qiáng)大而復(fù)雜的功能,所以這次畢業(yè)設(shè)計(jì),想在用戶體驗(yàn)上下一些功夫,設(shè)計(jì)一款能夠滿足我們?nèi)粘P枰奈募咏饷苘浖?。總體的設(shè)計(jì)思路是:既要保證文件的安全性,也要兼顧用戶體驗(yàn),避免繁瑣的操作。本次畢業(yè)設(shè)計(jì)的核心內(nèi)容分為兩部分,一部分是文件加密,作為一款文件加密軟件,最主要的內(nèi)容就是文件加密的安全性,即采用這款軟件加密后的文件,會(huì)不會(huì)被人輕易解密;另一部分是軟件安全,我們知道,軟件的開(kāi)發(fā)流程是編輯、編譯、調(diào)試,然后就是發(fā)布可執(zhí)行文件??蓤?zhí)行文件對(duì)一般用戶來(lái)說(shuō),就是一個(gè)小程序,但是對(duì)于一些別有用心的人,它不僅是一個(gè)小程序,它還是程序的源碼,他能夠把可執(zhí)行文件還原為源文件,這樣我們程序里的算法就被他一覽無(wú)余,所以我們?cè)诎l(fā)布之前還需要對(duì)可執(zhí)行文件做一些工作,來(lái)保護(hù)軟件的安全性,由其我們這是一款加密軟件,在保護(hù)文件安全的同時(shí),也要做好自身的防護(hù)工作。3.1.1界面設(shè)計(jì)界面主體采用選項(xiàng)卡設(shè)計(jì),共有3個(gè)選項(xiàng)卡,分別是加密、解密和工具箱。加密選項(xiàng)卡用于完成文件加密,解密選項(xiàng)卡用于完成文件解密,工具箱選項(xiàng)卡包含文件校驗(yàn)和文件粉碎兩個(gè)界面。3.1.2實(shí)現(xiàn)代碼設(shè)計(jì)加解密程序,采用AES算法。文件校驗(yàn),采用MD5算法。文件粉碎,刪除文件之后,會(huì)用空數(shù)據(jù)或隨機(jī)數(shù)據(jù)多次覆蓋在原數(shù)據(jù)上,保證刪除之后的文件不能被還原。軟件安全:第一次使用,需要輸入注冊(cè)碼(輸入后保存到配置文件里)。每次運(yùn)行軟件前,根據(jù)注冊(cè)碼生成一個(gè)key(算法不可逆),用key解密核心代碼(算法可逆),解密后根據(jù)核心代碼生成一個(gè)校驗(yàn)碼(算法不可逆),與存在程序里的校驗(yàn)碼比較,不正確提示并退出程序,正確則進(jìn)入程序。3.1.3操作流程第一次運(yùn)行程序,需要以管理員身份運(yùn)行程序,完成修改注冊(cè)表和生成配置文件的功能。再次運(yùn)行程序,需要輸入注冊(cè)碼,正確則保存注冊(cè)碼到配置文件并進(jìn)入程序,不正確則不保存注冊(cè)碼并提示退出程序。加密:鼠標(biāo)右鍵單擊需要加密的文件,資源管理器菜單會(huì)出現(xiàn)“文件管家”的選項(xiàng),點(diǎn)擊即會(huì)出現(xiàn)文件加密對(duì)話框,輸入加密密碼和確認(rèn)密碼,點(diǎn)擊加密,即可完成加密操作。需要注意的是,執(zhí)行加密操作默認(rèn)刪除源文件,可以在點(diǎn)擊加密之前,去掉“加密后,刪除源文件”前面的勾,則不會(huì)刪除源文件。解密:加密完成后,文件后綴變?yōu)镸YFM(MyFileManager的縮寫),加密后的文件圖標(biāo)會(huì)被換成“文件管家”的LOGO。要解密的時(shí)候,直接雙擊該文件,默認(rèn)用文件管家打開(kāi),輸入密碼即可完成解密操作??傮w來(lái)看,程序操作簡(jiǎn)潔,用戶體驗(yàn)比較好。3.2界面設(shè)計(jì)運(yùn)行VS2010,創(chuàng)建一個(gè)MFC項(xiàng)目,命名為:文件管家。項(xiàng)目建好后,將默認(rèn)對(duì)話框作為加密解密工具的主界面。在主界面添加一個(gè)TabControl,需要三個(gè)選項(xiàng)卡,分別是:加密、解密和工具箱,下面分別對(duì)這三個(gè)選項(xiàng)卡做詳細(xì)的設(shè)計(jì),設(shè)計(jì)時(shí)要用到vs2010里工具箱的工具。詳細(xì)設(shè)計(jì)如下:3.2.1LOGO設(shè)計(jì)圖3-1LOGO采用黑色主元素,黑色代表未知,即加密后文件比較安全,如圖3-1所示。3.2.2加密選項(xiàng)卡的設(shè)計(jì)圖3-2加密選項(xiàng)卡屬性設(shè)置建立一個(gè)對(duì)話框資源,Style屬性設(shè)為Child,Border屬性設(shè)為None,如圖3-2所示。解密選項(xiàng)卡和工具箱選項(xiàng)卡同加密選項(xiàng)卡。圖3-3加密選項(xiàng)卡界面設(shè)計(jì)加密選項(xiàng)卡最上面是一個(gè)不可讀的EditControl,用來(lái)顯示需要加密文件的文件名,因?yàn)槲募恍枰?,所以這里設(shè)置EditControl的Disabled為True。在加密時(shí)需要輸入加密密碼,為了避免因用戶按錯(cuò)鍵而導(dǎo)致密碼不正確,這里需要輸入確認(rèn)密碼。接著是一個(gè)Check-boxControl,用來(lái)選擇加密后是否刪除源文件,默認(rèn)刪除源文件。最后是兩個(gè)ButtonControl,分別為:加密和取消。點(diǎn)擊加密,則執(zhí)行加密操作;點(diǎn)擊取消,則放棄加密操作,并退出程序,如圖3-3所示。3.2.3解密選項(xiàng)卡的設(shè)計(jì)圖3-4解密選項(xiàng)卡界面設(shè)計(jì)解密選項(xiàng)卡最上面是一個(gè)不可讀的EditControl,用來(lái)顯示需要解密文件的文件名,因?yàn)槲募恍枰模赃@里設(shè)置EditControl的Disabled為True。接著又是一個(gè)EditControl,用來(lái)輸入解密密碼。接著是一個(gè)Check-boxControl,用來(lái)選擇解密后是否刪除源文件,默認(rèn)刪除源文件。最后是兩個(gè)ButtonControl,分別為:解密和取消。點(diǎn)擊解密,則執(zhí)行解密操作;點(diǎn)擊取消,則放棄解密操作,并退出程序,如圖3-4所示。3.2.4工具箱選項(xiàng)卡的設(shè)計(jì)圖3-5工具箱選項(xiàng)卡界面設(shè)計(jì)工具箱選項(xiàng)卡包含兩部分,文件校驗(yàn)和文件粉碎,工具箱選項(xiàng)卡最上面是一個(gè)EditControl,用來(lái)顯示當(dāng)前正在操作文件的文件名,如圖3-5所示。文件校驗(yàn):包含一個(gè)EditControl,用來(lái)顯示當(dāng)前文件的MD5值。文件粉碎:包含一個(gè)EditControl用來(lái)設(shè)置擦寫次數(shù),次數(shù)必須大于等于0。緊挨著EditControl的是一個(gè)SpinControl,用來(lái)增減EditControl里值。之后是兩個(gè)Radio-button-Control,用來(lái)選擇填充數(shù)據(jù),默認(rèn)選擇空數(shù)據(jù),用空數(shù)據(jù)來(lái)擦寫源文件所在的磁盤位置。最后是兩個(gè)ButtonControl,分別為:粉碎和取消。點(diǎn)擊粉碎,則執(zhí)行粉碎操作;點(diǎn)擊取消,則放棄粉碎操作,并退出程序。3.3實(shí)現(xiàn)代碼設(shè)計(jì)在界面設(shè)計(jì)的基礎(chǔ)上,進(jìn)行代碼設(shè)計(jì)。第一次運(yùn)行程序,需要輸入注冊(cè)碼(若正確則保存到配置文件中),之后每次運(yùn)行都要根據(jù)注冊(cè)碼生成key(不可逆算法),然后用key解密核心代碼(可逆算法),解密后根據(jù)核心代碼生成一個(gè)校驗(yàn)碼(不可逆算法),與存在程序里的校驗(yàn)碼比較,不正確提示并退出程序,正確則進(jìn)入程序,這些代碼放在主對(duì)話框的OnInitDialog()函數(shù)中,在程序初始化時(shí)運(yùn)行。其余詳細(xì)設(shè)計(jì)如下:3.3.1加密選項(xiàng)卡的設(shè)計(jì)圖3-6加密選項(xiàng)卡添加處理類使用ClassWizard生成新的類,基類為CDialogEx,對(duì)話框ID為IDD_DIALOG1,類名為:CPage1,這樣就為加密選項(xiàng)卡創(chuàng)建了一個(gè)類,所有對(duì)加密選項(xiàng)卡的操作,都可以寫在CPage1類中,如圖3-6所示。(解密選項(xiàng)卡、工具箱選項(xiàng)卡同)圖3-7加密選項(xiàng)卡程序運(yùn)行時(shí),首先讀取當(dāng)前操作文件的文件名,顯示在文件名編輯框中,如圖3-7所示。點(diǎn)擊加密按鈕后,首先判斷加密密碼和確認(rèn)密碼是否為空,若為空則彈出MessageBox,并中斷執(zhí)行加密函數(shù),重新回到輸入界面,等待用戶輸入。若加密密碼和確認(rèn)密碼都不為空,則判斷加密密碼和確認(rèn)密碼是否相同,若不相同,則彈出MessageBox,并中斷執(zhí)行加密函數(shù),重新回到輸入界面,等待用戶輸入。若加密密碼和確認(rèn)密碼相同,則讀取Check-boxControl的值,以確認(rèn)是否刪除源文件。最后調(diào)用AES算法,執(zhí)行文件加密操作,加密成功后,彈出MessageBox,并退出程序。點(diǎn)擊取消按鈕,什么操作都不做,直接退出程序。3.3.2解密選項(xiàng)卡的設(shè)計(jì)圖3-8解密選項(xiàng)卡程序運(yùn)行時(shí),首先讀取當(dāng)前操作文件的文件名,顯示在文件名編輯框中,如圖3-8所示。點(diǎn)擊解密按鈕后,首先判斷解密密碼是否為空,若為空則彈出MessageBox,并中斷執(zhí)行解密函數(shù),重新回到輸入界面,等待用戶輸入。若解密密碼不為空,則讀取Check-boxControl的值,以確認(rèn)是否刪除源文件。最后調(diào)用AES算法,執(zhí)行文件解密操作,解密成功后,彈出MessageBox,并退出程序。點(diǎn)擊取消按鈕,什么操作都不做,直接退出程序。3.3.3工具箱選項(xiàng)卡的設(shè)計(jì)圖3-9工具箱選項(xiàng)卡程序運(yùn)行時(shí),首先讀取當(dāng)前操作文件的文件名,顯示在文件名編輯框中。調(diào)用MD5算法,根據(jù)當(dāng)前文件的內(nèi)容生成MD5信息值,顯示在MD5編輯框中,來(lái)校驗(yàn)這個(gè)文件是否被“篡改”過(guò),如圖3-9所示。點(diǎn)擊粉碎按鈕后,首先讀取擦寫次數(shù),然后讀取Radio-button-Control,確定填充數(shù)據(jù),用空數(shù)據(jù)或隨機(jī)數(shù)據(jù)填充。最后調(diào)用粉碎函數(shù),執(zhí)行文件粉碎操作,即用填充數(shù)據(jù)填充當(dāng)前文件,重復(fù)擦寫次數(shù)次。粉碎成功后,彈出MessageBox,并退出程序。點(diǎn)擊取消按鈕,什么操作都不做,直接退出程序。3.3.4程序流程圖(1)注冊(cè)碼模塊流程圖,如圖3-10所示。圖3-10注冊(cè)驗(yàn)證流程圖(2)加密模塊流程圖,如圖3-11所示。圖3-11加密流程圖(3)解密模塊流程圖,如圖3-12所示。圖3-12解密流程圖(4)粉碎模塊流程圖,如圖3-13所示。圖3-13文件粉碎流程圖4設(shè)計(jì)結(jié)果及分析4.1設(shè)計(jì)結(jié)果展示4.1.1軟件初始化(1)右鍵以管理員身份運(yùn)行文件管家,如圖4-1所示。圖4-1以管理員身份運(yùn)行程序(2)創(chuàng)建配置文件,如圖4-2所示。圖4-2創(chuàng)建配置文件(3)修改注冊(cè)表-添加”文件管家“到資源管理器右鍵菜單,如圖4-3所示。圖4-3添加到資源管理器右鍵菜單(4)修改注冊(cè)表-自定義資源管理器右鍵菜單中圖標(biāo),如圖4-4所示。圖4-4設(shè)置資源管理器右鍵菜單圖標(biāo)(5)修改注冊(cè)表-自定義文件類型,如圖4-5所示。圖4-5自定義文件類型(6)修改注冊(cè)表-自定義文件類型圖標(biāo),如圖4-6所示。圖4-6設(shè)置自定義文件類型圖標(biāo)(7)修改注冊(cè)表-自定義文件類型默認(rèn)打開(kāi)程序,如圖4-7所示。圖4-7設(shè)置自定義文件類型默認(rèn)打開(kāi)程序4.1.2注冊(cè)碼驗(yàn)證(1)再次雙擊運(yùn)行程序,彈出注冊(cè)碼輸入框,如圖4-8所示。圖4-8雙擊運(yùn)行程序(2)輸入錯(cuò)誤的注冊(cè)碼,彈出提醒對(duì)話框,并退出程序,如圖4-9所示。圖4-9注冊(cè)碼錯(cuò)誤提示(3)輸入正確的注冊(cè)碼,進(jìn)入程序主界面,如圖4-10所示。圖4-10注冊(cè)碼正確,進(jìn)入程序(4)正確的注冊(cè)碼保存到配置文件中,以后就不需要輸入注冊(cè)碼了,如圖4-11所示。圖4-11注冊(cè)碼保存在配置文件到這里,軟件的初始化工作全部完成,下面就可以使用文件管家來(lái)進(jìn)行文件加密、文件解密、文件校驗(yàn)和文件粉碎功能了。4.1.3文件加密(1)右鍵單擊需要加密的文件,在彈出的資源管理器右鍵菜單中選擇“文件管家”,如圖4-12所示。圖4-12右鍵單擊需要加密的文件(2)確認(rèn)密碼為空,如圖4-13所示。圖4-13密碼為空提示(3)加密密碼和確認(rèn)密碼不一致,如圖4-14所示。圖4-14密碼不一致提示(4)加密密碼和確認(rèn)密碼一致,如圖4-15所示。圖4-15加密成功提示(5)加密后的文件后綴為MYFM,圖標(biāo)為文件管家logo,如圖4-16所示。圖4-16加密后圖標(biāo)變化(6)打開(kāi)文件,全部為亂碼,加密成功,如圖4-17所示。圖4-17加密后內(nèi)容為亂碼4.1.4文件解密(1)雙擊需要解密的文件,如圖4-18所示。圖4-18雙擊需要解密的文件(2)解密密碼為空,如圖4-19所示。圖4-19密碼為空提示(3)備份一份加密后的文件,輸入錯(cuò)誤的解密密碼,打開(kāi)解密后的文件,依然為亂碼,如圖4-20所示。圖4-20帶解密文件為亂碼(4)輸入正確的解密密碼,打開(kāi)解密后的文件,解密成功,如圖4-21所示。圖4-21解密后文件恢復(fù)4.1.5文件校驗(yàn)(1)右鍵單擊需要校驗(yàn)的文件,在彈出的資源管理器右鍵菜單中選擇“文件管家”,在彈出的界面中,選擇“工具箱”選項(xiàng)卡,如圖4-22所示。圖4-22MD5校驗(yàn)4.1.6文件粉碎(1)右鍵單擊需要粉碎的文件,在彈出的資源管理器右鍵菜單中選擇“文件管家”,在彈出的界面中,選擇“工具箱”選項(xiàng)卡,修改擦寫次數(shù)和填充數(shù)據(jù),如圖4-23所示。圖4-23文件粉碎4.2設(shè)計(jì)結(jié)果分析及說(shuō)明4.2.1軟件初始化File:CFileManagerDlg.cppMethod:CFileManagerDlg::OnInitDialog()FILE*pf=fopen(exepath,"r");if(pf==NULL)//根據(jù)是否有配置文件,判斷程序是否為第一次運(yùn)行{ pf=fopen(exepath,"w+");//創(chuàng)建配置文件(配置文件用來(lái)存放注冊(cè)碼) HKEYhkey;//調(diào)用RegCreateKey時(shí)用到,得到一個(gè)key的句柄 /*將文件管家添加到資源管理器右鍵菜單*/ //獲取HKEY_CLASSES_ROOT下"*\\shell\\文件管家\\command"鍵的句柄 RegCreateKey(HKEY_CLASSES_ROOT,"*\\shell\\文件管家\\command",&hkey); //得到文件管家的絕對(duì)路徑 GetModuleFileName(NULL,exepath.GetBuffer(MAX_PATH),MAX_PATH); //用ReleaseBuffer去掉exepath沒(méi)有用到的空間 //因?yàn)閑xepath.GetBuffer(MAX_PATH)得到了一個(gè)存放路徑的最大空間 exepath.ReleaseBuffer(); exepath="\""+exepath+"\"\"%1\"";//拼接字符串,使其為cmd命令 //在hkey中注冊(cè)一個(gè)名為exepath的值 //其值為(constBYTE*)exepath.GetBuffer(exepath.GetLength()) //長(zhǎng)度為exepath.GetLength() RegSetValueEx(hkey,NULL,0,REG_SZ, (constBYTE*)exepath.GetBuffer(exepath.GetLength()), exepath.GetLength()); RegCloseKey(hkey);//釋放指定注冊(cè)鍵的句柄hkey /*設(shè)置文件管家資源管理器右鍵菜單的圖片*/ //獲取HKEY_CLASSES_ROOT下"*\\shell\\文件管家"鍵的句柄 RegCreateKey(HKEY_CLASSES_ROOT,"*\\shell\\文件管家",&hkey); //得到文件管家的絕對(duì)路徑 GetModuleFileName(NULL,exepath.GetBuffer(MAX_PATH),MAX_PATH); exepath.ReleaseBuffer();//用ReleaseBuffer去掉exepath沒(méi)有用到的空間 //拼接字符串,使其為圖標(biāo)路徑 ch='\\'; n=exepath.ReverseFind(ch); exepath=exepath.Left(n); exepath=exepath+"\\src\\logo.ico"; //在hkey中注冊(cè)一個(gè)名為exepath的值 //其值為(constBYTE*)exepath.GetBuffer(exepath.GetLength()), //長(zhǎng)度為exepath.GetLength() RegSetValueEx(hkey,"icon",0,REG_SZ, (constBYTE*)exepath.GetBuffer(exepath.GetLength()), exepath.GetLength()); RegCloseKey(hkey);//釋放指定注冊(cè)鍵的句柄hkey /*自定義文件類型*/ //HKEY_CLASSES_ROOT\.myfm RegCreateKey(HKEY_CLASSES_ROOT,".myfm",&hkey); exepath="FileManager.File"; //在hkey中注冊(cè)一個(gè)名為exepath的值 //其值為(constBYTE*)exepath.GetBuffer(exepath.GetLength()) //長(zhǎng)度為exepath.GetLength() RegSetValueEx(hkey,NULL,0,REG_SZ, (constBYTE*)exepath.GetBuffer(exepath.GetLength()), exepath.GetLength()); RegCloseKey(hkey);//釋放指定注冊(cè)鍵的句柄hkey /*自定義文件類型,默認(rèn)打開(kāi)程序*/ //HKEY_CLASSES_ROOT\FileManager.File\shell\open\command RegCreateKey(HKEY_CLASSES_ROOT,"FileManager.File\\shell\\open\\command",&hkey); //得到文件管家的絕對(duì)路徑 GetModuleFileName(NULL,exepath.GetBuffer(MAX_PATH),MAX_PATH); exepath.ReleaseBuffer();//用ReleaseBuffer去掉exepath沒(méi)有用到的空間 exepath="\""+exepath+"\"\"%1\"2";//拼接字符串,使其為cmd命令 //在hkey中注冊(cè)一個(gè)名為exepath的值 //其值為(constBYTE*)exepath.GetBuffer(exepath.GetLength()) //長(zhǎng)度為exepath.GetLength() RegSetValueEx(hkey,NULL,0,REG_SZ, (constBYTE*)exepath.GetBuffer(exepath.GetLength()), exepath.GetLength()); RegCloseKey(hkey);//釋放指定注冊(cè)鍵的句柄hkey /*自定義文件類型圖標(biāo)*/ //HKEY_CLASSES_ROOT\FileManager.File\DefaultIcon RegCreateKey(HKEY_CLASSES_ROOT,"FileManager.File\\DefaultIcon",&hkey); //得到文件管家的絕對(duì)路徑 GetModuleFileName(NULL,exepath.GetBuffer(MAX_PATH),MAX_PATH); exepath.ReleaseBuffer();//用ReleaseBuffer去掉exepath沒(méi)有用到的空間 //拼接字符串,使其為圖標(biāo)路徑 ch='\\'; n=exepath.ReverseFind(ch); exepath=exepath.Left(n); exepath=exepath+"\\src\\logo.ico"; //在hkey中注冊(cè)一個(gè)名為exepath的值 //其值為(constBYTE*)exepath.GetBuffer(exepath.GetLength()) //長(zhǎng)度為exepath.GetLength() RegSetValueEx(hkey,NULL,0,REG_SZ, (constBYTE*)exepath.GetBuffer(exepath.GetLength()), exepath.GetLength()); RegCloseKey(hkey);//釋放指定注冊(cè)鍵的句柄hkey //第一次運(yùn)行,修改注冊(cè)表、創(chuàng)建配置文件后,程序退出 CFileManagerDlg::OnCancel(); returnTRUE;}4.2.2注冊(cè)碼驗(yàn)證File:CFileManagerDlg.cppMethod:CFileManagerDlg::OnInitDialog()CStringstrRegKey;//存放注冊(cè)碼GetPrivateProfileString("REG","key","", strRegKey.GetBuffer(MAX_PATH),MAX_PATH, exepath);//讀取配置文件中的注冊(cè)碼strRegKey.ReleaseBuffer();//釋放沒(méi)有用到的空間if(strRegKey.IsEmpty()){ //彈出輸入注冊(cè)碼對(duì)話框 CRegregDlg; if(regDlg.DoModal()==IDOK) { strRegKey=regDlg.strRegKey;//點(diǎn)擊確定按鈕,讀注冊(cè)碼IDC_EDIT_REG } else { //點(diǎn)擊取消按鈕,退出程序 CFileManagerDlg::OnCancel(); returnTRUE; }}//(1)根據(jù)注冊(cè)碼得到keyLPSTRpRegKey=(LPSTR)(LPCTSTR)strRegKey;charkey='\0';charchTmp='\0';while(chTmp=*pRegKey++){ /* 一個(gè)char8位,2^8=256種可能,若窮舉攻擊,需256種可能 本次畢業(yè)設(shè)計(jì)重點(diǎn)在于體系設(shè)計(jì),故采用一字節(jié)。 */ key^=chTmp;}//(2)根據(jù)key解密核心代碼/* 解密核心代碼 正確key=0x52'R' 核心代碼長(zhǎng)度:63字節(jié)*/DecryptKernelCode(63,key);//(3)驗(yàn)證核心代碼的正確性,若正確,寫注冊(cè)碼到ini文件,若錯(cuò)誤,提示并退出。/* 驗(yàn)證核心代碼的正確性*/boolb=CFileManagerDlg::VerifyKernelCode(63);if(!b)//注冊(cè)碼錯(cuò)誤{ //將配置文件置空 WritePrivateProfileString("REG","key","",exepath); MessageBox("注冊(cè)碼錯(cuò)誤!"); CFileManagerDlg::OnCancel(); returnTRUE;}else//注冊(cè)碼正確{//將注冊(cè)碼寫回配置文件 WritePrivateProfileString("REG","key",strRegKey,exepath);}File:CFileManagerDlg.cppMethod:CFileManagerDlg::DecryptKernelCode()voidCFileManagerDlg::DecryptKernelCode(intnLen,charkey)//解密核心代碼{ //修改內(nèi)存屬性 //核心代碼地址:0x0069EBA4 DWORDoldProtect; VirtualProtect((void*)0x0069EBA4,nLen, PAGE_EXECUTE_READWRITE,&oldProtect); unsignedcharary[1];//用來(lái)訪問(wèn)關(guān)鍵代碼 for(inti=0;i<nLen;i++) { //還原關(guān)鍵數(shù)據(jù),可逆算法 ary[0x0069EBA4-(int)ary+i]=ary[0x0069EBA4-(int)ary+i]^key; } VirtualProtect((void*)0x0069EBA4,nLen,oldProtect,&oldProtect);//還原內(nèi)存屬性}File:CFileManagerDlg.cppMethod:CFileManagerDlg::VerifyKernelCode()boolCFileManagerDlg::VerifyKernelCode(intnLen)//驗(yàn)證核心代碼的正確性{ //修改內(nèi)存屬性 //核心代碼地址:0x0069EBA4 DWORDoldProtect; VirtualProtect((void*)0x0069EBA4,nLen, PAGE_EXECUTE_READWRITE,&oldProtect); unsignedcharary[1];//用來(lái)訪問(wèn)關(guān)鍵代碼 unsignedcharverify='\0'; for(inti=0;i<nLen;i++) { verify+=ary[0x0069EBA4-(int)ary+i]>>(i%9);//生成驗(yàn)證碼,不可逆算法 } VirtualProtect((void*)0x0069EBA4,nLen,oldProtect,&oldProtect);//還原內(nèi)存屬性 //校驗(yàn)代碼是否還原正確 //正確校驗(yàn)碼:0x8f if(verify==0x8f) { returntrue; } else { returnfalse; }}4.2.3文件加密File:CPage1.cppMethod:CPage1::OnBnClickedOk()//密碼轉(zhuǎn)換,Cstring->char*unsignedcharkey[4][8];//256位密碼inti=0,j=0,strlen=strPwd.GetLength();for(i=0;i<4;i++){for(j=0;j<8;j++){ if((i*8+j)<strlen){key[i][j]=(unsignedchar)strPwd[(i*8+j)];}else{key[i][j]=0x00; }}}AES.initial(8,key);//AES初始化EncryptFile();//文件加密File:CPage1.cppMethod:CPage1::EncryptFile()finput=fopen(strFileFullPath,"rb");//打開(kāi)需要加密的文件fseek(finput,0,SEEK_END);longlFileLen=ftell(finput);//獲得文件長(zhǎng)度f(wàn)seek(finput,0,SEEK_SET);longblocknum=lFileLen/16;longleftnum=lFileLen%16;strFileFullPath+=".MYFM";foutput=fopen(strFileFullPath,"wb");//打開(kāi)加密后的文件unsignedcharinBuff[25],ouBuff[25];unsignedcharctming[4][4],ctme[4][4];for(longi=0;I<blocknum;i++){fread(inBuff,1,16,finput);//每次加密16個(gè)字節(jié)for(j=0;j<4;j++){for(k=0;k<4;k++){ctming[j][k]=inBuff[j*4+k];}}AES.Encrypt(ctming,ctme);//加密函數(shù)for(j=0;j<4;j++){for(k=0;k<4;k++){ouBuff[j*4+k]=ctme[j][k];}}fwrite(ouBuff,1,16,foutput);}if(leftnum)//加密分組后剩下的字節(jié){for(j=0;j<16;j++){inBuff[j]=0;}fread(inBuff,1,leftnum,finput);for(j=0;j<4;j++){for(k=0;k<4;k++){ctming[j][k]=inBuff[j*4+k];}}AES.Encrypt(ctming,ctme);//加密函數(shù)for(j=0;j<4;j++){for(k=0;k<4;k++){ouBuff[j*4+k]=ctme[j][k];}}fwrite(ouBuff,1,16,foutput);}4.2.4文件解密File:CPage2.cppMethod:CPage2::OnBnClickedOk()//密碼轉(zhuǎn)換,Cstring->char*unsignedcharkey[4][8];//256位密碼inti=0,j=0,strlen=strPwd.GetLength();for(i=0;i<4;i++){for(j=0;j<8;j++){ if((i*8+j)<strlen){key[i][j]=(unsignedchar)strPwd[(i*8+j)];}else{key[i][j]=0x00; }}}AES.initial(8,key);//AES初始化DecryptFile();//文件解密File:CPage2.cppMethod:CPage2::DecryptFile()Finput=fopen(strFileFullPath,"rb");//打開(kāi)需要解密的文件fseek(finput,0,SEEK_END);longlFileLen=ftell(finput);//獲取文件長(zhǎng)度f(wàn)seek(finput,0,SEEK_SET);longblocknum=lFileLen/16;longleftnum=lFileLen%16;strFileFullPath=strFileFullPath.Left(strFileFullPath.GetLength()-5);foutput=fopen(strFileFullPath,"wb");//打開(kāi)解密后的文件unsignedcharinBuff[25],ouBuff[25];unsignedcharctming[4][4],ctme[4][4];for(longI=0;i<blocknum;i++){//解密16個(gè)字節(jié)fread(inBuff,1,16,finput);for(j=0;j<4;j++){for(k=0;k<4;k++){ctme[j][k]=inBuff[j*4+k];}}AES.Decrypt(ctming,ctme);//解密操作for(j=0;j<4;j++){for(k=0;k<4;k++){ouBuff[j*4+k]=ctming[j][k];}}fwrite(ouBuff,1,16,foutput);}4.2.5文件校驗(yàn)File:CPage3.cppMethod:CPage3::OnInitDialog()//讀取右鍵點(diǎn)擊的文件信息LPWSTR*szArglist=NULL;intnArgs=0;szArglist=CommandLineToArgvW(GetCommandLineW(),&nArgs);if(NULL!=szArglist){CStringpath;//獲得文件路徑path=szArglist[1];GetDlgItem(IDC_EDIT_FILENAME)->SetWindowText(path);//獲得校驗(yàn)碼,并顯示CMD5md5;md5.update(ifstream(path));GetDlgItem(IDC_EDIT_MD5)->SetWindowText(md5.toString().c_str());}LocalFree(szArglist);//取得參數(shù)后,釋放CommandLineToArgvW申請(qǐng)的空間4.2.6文件粉碎File:CPage3.cppMethod:CPage3::Shatter()//讀取文件路徑CStringpath;((CEdit*)GetDlgItem(IDC_EDIT_FILENAME))->GetWindowText(path);//讀取擦寫次數(shù)CStringstrNum=NULL;intnNum=0;((CEdit*)GetDlgItem(IDC_EDIT_NUM))->GetWindowText(strNum);nNum=_ttoi(strNum);//讀取擦寫內(nèi)容intnContent=0;nContent=GetCheckedRadioButton(IDC_RADIO_NULL,IDC_RADIO_RANDOM);FILE*pf=NULL;pf=fopen(path,"r+");//獲得文件大小intnSize=0;fseek(pf,0,SEEK_END);nSize=ftell(pf);fseek(pf,0,SEEK_SET);//擦寫操作charch;inti=0;intj=0;for(i=0;i<nNum;i++){for(j=0;j<nSize;j++){if(nContent==IDC_RADIO_NULL){ch='\0';}else{srand((unsigned)time(NULL));ch=(char)(rand()/256);}fputc(ch,pf);}}結(jié)論本次畢業(yè)設(shè)計(jì),設(shè)計(jì)了一款集文件加密、文件解密、文件校驗(yàn)和文件粉碎功能于一身的軟件,文件管家。功能上滿足一般用戶的日常需要,能夠很好的保護(hù)用戶的個(gè)人數(shù)據(jù);操作上簡(jiǎn)單,方便,大大提高了用戶體驗(yàn)。并根據(jù)shellcode的編碼原理,對(duì)軟件進(jìn)行了加密,降低了軟件被逆向的風(fēng)險(xiǎn),從而能夠很好的保護(hù)軟件的核心算法。通過(guò)本次畢業(yè)設(shè)計(jì),使我深入的理解了AES算法的加密和解密過(guò)程,對(duì)shellcode的編碼原理有了更深層次的認(rèn)識(shí)。讓我對(duì)軟件的設(shè)計(jì)過(guò)程有了一個(gè)更好的熟悉,受益匪淺。參考文獻(xiàn)[1]丁晨驪.文件加密解密算法研究與實(shí)現(xiàn)[D].上海交通大學(xué),2009[2]何明星,林昊.AES算法原理及其實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2002,(12)[3]蔡宇東,沈海斌,嚴(yán)曉浪.AES算法的高速實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2004,(1)[4]卜曉燕,張根耀,郭協(xié)潮.基于AES算法實(shí)現(xiàn)對(duì)數(shù)據(jù)的加密[J].電子設(shè)計(jì)工程,2009,(3)[5]林茂瓊,李敏強(qiáng),寇紀(jì)淞,熊凱.基于AES的數(shù)據(jù)加密方案[J].計(jì)算機(jī)工程[J],2002,(4)[6]陳尚義.透明文件加解密技術(shù)及其應(yīng)用[J].信息安全與通信保密,2007,(11)[7]王全民,周清,劉宇明,朱二夫.文件透明加密技術(shù)研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010,(3)[8]黃革新.Windows加密文件系統(tǒng)核心技術(shù)分析[J].電腦與信息技術(shù),2005,(4)[9]JianWeng,RobertH.Deng,ShengliLiu,KefeiChen.Chosen-ciphertextsecurebidirectionalproxy re-encryptionschemeswithoutpairingsOriginalResearchArticleInformationSciences,Volume 180,Issue24,15December2010,Pages5077-5089[10]ThomasW.Shinder,DebraLittlejohnShinder,MartinGrasdal.Chapter9-DefendingYourData withtheEncryptingFileSystem.ISAServerandBeyond,2002,Pages533-576[11]AntonioIzquierdoManzanares,JoseM.SierraCamara,JoaquinTorresMarquez.Onthe implementationofsecuritypolicieswithadaptativeencryptionOriginalResearchArticleComputer Communications,Volume29,Issue15,5September2006,Pages2750-2758致謝歲月如歌,光陰似箭,四年的大學(xué)生活即將結(jié)束。經(jīng)歷了找工作的喧囂與坎坷,我深深體會(huì)到了寫作論文時(shí)的那份寧?kù)o與思考?;厥姿哪甑那髮W(xué)歷程,對(duì)那些引導(dǎo)我、幫助我、激勵(lì)我的人,我心中充滿了感激。首先要感謝指導(dǎo)老師李麗珍副教授,論文定題到寫作定稿,傾注了李老師大量的心血。在我畢業(yè)設(shè)計(jì)期間,深深受益于李老師的關(guān)心、愛(ài)護(hù)和諄諄教導(dǎo)。她作為老師,點(diǎn)撥迷津,讓人如沐春風(fēng);作為長(zhǎng)輩,關(guān)懷備至,讓人感念至深。在此謹(jǐn)向李老師表示我最誠(chéng)摯的敬意和感謝!還要感謝朱凱老師。朱老師在論文的寫作中給予了許多指導(dǎo)與建議,謹(jǐn)在此表示衷心的感謝。同時(shí),我要感謝一直關(guān)心與支持我的同學(xué)和朋友們!四年來(lái),我們朝夕相處,共同進(jìn)步,感謝你們給予我的所有關(guān)心和幫助。同窗之誼,我將終生難忘!在此要感謝我生活學(xué)習(xí)了四年的母?!砉ご髮W(xué),母校給了我一個(gè)寬闊的學(xué)習(xí)平臺(tái),讓我不斷吸取新知,充實(shí)自己。需要特別感謝的是我的父母。父母的養(yǎng)育之恩無(wú)以為報(bào),他們是我十多年求學(xué)路上的堅(jiān)強(qiáng)后盾,在我面臨人生選擇的迷茫之際,為我排憂解難,他們對(duì)我無(wú)私的愛(ài)與照顧是我不斷前進(jìn)的動(dòng)力。外文原文1IntroductionThisstandardspecifiestheRijndaelalgorithm,asymmetricblockcipherthatcanprocessdatablocksof128bits,usingcipherkeyswithlengthsof128,192,and256bits.Rijndaelwasdesignedtohandleadditionalblocksizesandkeylengths,howevertheyarenotadoptedinthisstandard.Throughouttheremainderofthisstandard,thealgorithmspecifiedhereinwillbereferredtoas“theAESalgorithm.”Thealgorithmmaybeusedwiththethreedifferentkeylengthsindicatedabove,andthereforethesedifferent“flavors”maybereferredtoas“AES-128”,“AES-192”,and“AES-256”.Thisspecificationincludesthefollowingsections:2Definitionsofterms,acronyms,andalgorithmparameters,symbols,andfunctions;3Notationandconventionsusedinthealgorithmspecification,includingtheorderingandnumberingofbits,bytes,andwords;4Mathematicalpropertiesthatareusefulinunderstandingthealgorithm;Thestandardconcludeswithseveralappendicesthatincludestep-by-stepexamplesforKeyExpansionandtheCipher,examplevectorsfortheCipherandInverseCipher,andalistofreferences.2Definitions2.1GlossaryofTermsandAcronymsThefollowingdefinitionsareusedthroughoutthisstandard:AESAdvancedEncryptionStandardAffineAtransformationconsistingofmultiplicationbyamatrixfollowedbyransformationtheadditionofavector.ArrayAnenumeratedcollectionofidenticalentities(e.g.,anarrayofbytes).BitAbinarydigithavingavalueof0or1.BlockSequenceofbinarybitsthatcomprisetheinput,output,State,andRoundKey.Thelengthofasequenceisthenumberofbitsitcontains.Blocksarealsointerpretedasarraysofbytes.ByteAgroupofeightbitsthatistreatedeitherasasingleentityorasanarrayof8individualbits.CipherSeriesoftransformationsthatconvertsplaintexttociphertextusingtheCipherKey.CipherKeySecret,cryptographickeythatisusedbytheKeyExpansionroutinetogenerateasetofRoundKeys;canbepicturedasarectangulararrayofbytes,havingfourrowsandNkcolumns.CiphertextDataoutputfromtheCipherorinputtotheInverseCipher.InverseCipherSeriesoftransformationsthatconvertsciphertexttoplaintextusingtheCipherKey.KeyExpansionRoutineusedtogenerateaseriesofRoundKeysfromtheCipherKey.PlaintextDatainputtotheCipheroroutputfromtheInverseCipher.RijndaelCryptographicalgorithmspecifiedinthisAdvancedEncryptionStandard(AES).RoundKeyRoundkeysarevaluesderivedfromtheCipherKeyusingtheKeyExpansionroutine;theyareappliedtotheStateintheCipherandInverseCipher.StateIntermediateCipherresultthatcanbepicturedasarectangulararrayofbytes,havingfourrowsandNbcolumns.S-boxNon-linearsubstitutiontableusedinseveralbytesubstitutiontransformationsandintheKeyExpansionroutinetoperformaone-for-onesubstitutionofabytevalue.WordAgroupof32bitsthatistreatedeitherasasingleentityorasanarrayof4bytes.2.2AlgorithmParameters,Symbols,andFunctionsThefollowingalgorithmparameters,symbols,andfunctionsareusedthroughoutthisstandard:AddRoundKey() TransformationintheCipherandInverseCipherinwhichaRoundKeyisaddedtotheStateusinganXORoperation.ThelengthofaRoundKeyequalsthesizeoftheState(i.e.,forNb=4,theRoundKeylengthequals128bits/16bytes).InvMixColumns()TransformationintheInverseCipherthatistheinverseofMixColumns().InvShiftRows()TransformationintheInverseCipherthatistheinverseofShiftRows().InvSubBytes()TransformationintheInverseCipherthatistheinverseofSubBytes().KCipherKey.MixColumns()TransformationintheCipherthattakesallofthecolumnsoftheStateandmixestheirdata(independentlyofoneanother)toproducenewcolumns.NbNumberofcolumns(32-bitwords)comprisingtheState.Forthisstandard,Nb=4.Nk Numberof32-bitwordscomprisingtheCipherKey.Forthisstandard,Nk=4,6,or8.NrNumberofrounds,whichisafunctionofNkandNb(whichisfixed).Forthisstandard,Nr=10,12,or14.Rcon[] Theroundconstantwordarray.RotWord() FunctionusedintheKeyExpansionroutinethattakesafour-bytewordandperformsacyclicpermutation.ShiftRows() TransformationintheCipherthatprocessestheStatebycyclicallyshiftingthelastthreerowsoftheStatebydifferentoffsets.SubBytes()TransformationintheCipherthatprocessestheStateusinganon-linearbytesubstitutiontable(S-box)thatoperatesoneachoftheStatebytesindependently.SubWord() FunctionusedintheKeyExpansionroutinethattakesafour-byteinputwordandappliesanS-boxtoeachofthefourbytestoproduceanoutputword.XORExclusive-ORoperation.3NotationandConventions3.1InputsandOutputsTheinputandoutputfortheAESalgorithmeachconsistofsequencesof128bits(digitswithvaluesof0or1).Thesesequenceswillsometimesbereferredtoasblocksandthenumberofbitstheycontainwillbereferredtoastheirlength.TheCipherKeyfortheAESalgorithmisasequenceof128,192or256bits.Otherinput,outputandCipherKeylengthsarenotpermittedbythisstandard.Thebitswithinsuchsequenceswillbenumberedstartingatzeroandendingatonelessthanthesequencelength(blocklengthorkeylength).Thenumberiattachedtoabitisknownasitsindexandwillbeinoneoftheranges0<i<128,0<i<192or0<i<256dependingontheblocklengthandkeylength(specifiedabove).3.2BytesThebasicunitforprocessingintheAESalgorithmisabyte,asequenceofeightbitstreatedasasingleentity.Theinput,outputandCipherKeybitsequencesdescribedinSec.3.1areprocessedasarraysofbytesthatareformedbydividingthesesequencesintogroupsofeightcontiguousbitstoformarraysofbytes(seeSec.3.3).Foraninput,outputorCipherKeydenotedbya,thebytesintheresultingarraywillbereferencedusingoneofthetwoforms,anora[n],wherenwillbeinoneofthefollowingranges:Keylength=128bits,0n<16.Keylength=192bits,0n<24.Keylength=256bits,0n<32.Blocklength=128bits,0n<16.AllbytevaluesintheAESalgorithmwillbepresentedastheconcatenationofitsindividualbitvalues(0or1)betweenbracesintheorder{b7,b6,b5,b4,b3,b2,b1,b0}.Thesebytesareinterpretedasfinitefieldelementsusingapolynomialrepresentation:Forexample,{01100011}identifiesthespecificfinitefieldelementItisalsoconvenienttodenotebytevaluesusinghexadecimalnotationwitheachoftwogroupsoffourbitsbeingdenotedbyasinglecharacterasinFig.1.Hencetheelement{01100011}canberepresentedas{63},w
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)寵物租房合同范例
- 包裝物購(gòu)銷合同范例
- 中介合同范本樣本
- 農(nóng)副產(chǎn)品馬蹄收購(gòu)合同范本
- 別墅土建付款合同范本
- 涼山校園保潔合同范本
- 人資服務(wù)合同范本
- 全款車抵押合同范本
- 公里樁合同范本
- 勞務(wù)派遣未簽合同范例
- 網(wǎng)絡(luò)營(yíng)銷教案完整版講義
- 山東省任氏宗親分布村落
- 《固體物理學(xué)》全冊(cè)完整教學(xué)課件
- 陜西省建設(shè)工程長(zhǎng)安杯獎(jiǎng)省優(yōu)質(zhì)工程結(jié)構(gòu)備案和復(fù)查的要求
- 水生觀賞動(dòng)物鑒賞與維護(hù)課程
- ATOS阿托斯葉片泵PFE-31PFE-41PFE-51選型資料樣本
- 體育測(cè)量與評(píng)價(jià)PPT課件-第三章 身體形態(tài)的測(cè)量與評(píng)價(jià)
- 學(xué)生個(gè)人成長(zhǎng)檔案實(shí)用模板
- 經(jīng)典老歌簡(jiǎn)譜100首
- 日語(yǔ)綜合教程第五冊(cè)的PPT5-1
- 外購(gòu)件采購(gòu)清單模版(含標(biāo)準(zhǔn)件、外購(gòu)件、自制件)
評(píng)論
0/150
提交評(píng)論