AES文件加密功能:
1、對(duì)多文件加密進(jìn)行了線程優(yōu)化。但沒(méi)有對(duì)單文件進(jìn)行優(yōu)化。(目測(cè)90個(gè)文件,140M,耗時(shí)20S,880M單文件耗時(shí)2M)
2、沒(méi)有對(duì)密碼做驗(yàn)證機(jī)制。因?yàn)椴捎昧司彌_流操作(一次加解密512kb,所以即使密碼不正確解密也不會(huì)浪費(fèi)多少時(shí)間,會(huì)拋出異常并且彈出提示框),操作上比較方便了。
3、由于主要目的不是為了學(xué)習(xí)加密算法,所以沒(méi)深究,只有AES一種算法。等有空了再添加RC4算法。不嘮叨鳥(niǎo)。用了幾天沒(méi)發(fā)現(xiàn)BUG。
4、文件名中的標(biāo)簽“(已加密)”,是不能改的哦。否則會(huì)進(jìn)行排除。
AES文件加密使用說(shuō)明:
1、直接拖拽文件到程序的列表控件中
2、可在設(shè)置列表中勾選-刪除原文件
3、沒(méi)有文件粉碎功能
AES文件加密更新內(nèi)容:
增加了文件夾的加密。方式就是直接把目錄拖到界面中,就會(huì)循環(huán)解析成里面所有的子文件。沒(méi)有增設(shè)按鈕了。反正拖拽方便些。估計(jì)下次更新就是增加算法了。雖然更新的比較慢,嘿嘿。隨著時(shí)間的推移讓它更為強(qiáng)大。
相關(guān)內(nèi)容—AES加密原理:
隨著對(duì)稱密碼的發(fā)展,DES數(shù)據(jù)加密標(biāo)準(zhǔn)算法由于密鑰長(zhǎng)度較小(56位),已經(jīng)不適應(yīng)當(dāng)今分布式開(kāi)放網(wǎng)絡(luò)對(duì)數(shù)據(jù)加密安全性的要求,因此1997年NIST公開(kāi)征集新的數(shù)據(jù)加密標(biāo)準(zhǔn),即AES[1]。經(jīng)過(guò)三輪的篩選,比利時(shí)Joan Daeman和Vincent Rijmen提交的Rijndael算法被提議為AES的最終算法。此算法將成為美國(guó)新的數(shù)據(jù)加密標(biāo)準(zhǔn)而被廣泛應(yīng)用在各個(gè)領(lǐng)域中。盡管人們對(duì)AES還有不同的看法,但總體來(lái)說(shuō),AES作為新一代的數(shù)據(jù)加密標(biāo)準(zhǔn)匯聚了強(qiáng)安全性、高性能、高效率、易用和靈活等優(yōu)點(diǎn)。AES設(shè)計(jì)有三個(gè)密鑰長(zhǎng)度:128,192,256位,相對(duì)而言,AES的128密鑰比DES的56密鑰強(qiáng)1021倍[2]。AES算法主要包括三個(gè)方面:輪變化、圈數(shù)和密鑰擴(kuò)展。本文以128為例,介紹算法的基本原理;結(jié)合AVR匯編語(yǔ)言,實(shí)現(xiàn)高級(jí)數(shù)據(jù)加密算法AES?! ?/p>
AES是分組密鑰,算法輸入128位數(shù)據(jù),密鑰長(zhǎng)度也是128位。用Nr表示對(duì)一個(gè)數(shù)據(jù)分組加密的輪數(shù)(加密輪數(shù)與密鑰長(zhǎng)度的關(guān)系如表1所列)。每一輪都需要一個(gè)與輸入分組具有相同長(zhǎng)度的擴(kuò)展密鑰Expandedkey(i)的參與。由于外部輸入的加密密鑰K長(zhǎng)度有限,所以在算法中要用一個(gè)密鑰擴(kuò)展程序(Keyexpansion)把外部密鑰K擴(kuò)展成更長(zhǎng)的比特串,以生成各輪的加密和解密密鑰。
1.1圈變化
AES每一個(gè)圈變換由以下三個(gè)層組成:
非線性層——進(jìn)行Subbyte變換;
線行混合層——進(jìn)行ShiftRow和MixColumn運(yùn)算;
密鑰加層——進(jìn)行AddRoundKey運(yùn)算。
① Subbyte變換是作用在狀態(tài)中每個(gè)字節(jié)上的一種非線性字節(jié)轉(zhuǎn)換,可以通過(guò)計(jì)算出來(lái)的S盒進(jìn)行映射。
② ShiftRow是一個(gè)字節(jié)換位。它將狀態(tài)中的行按照不同的偏移量進(jìn)行循環(huán)移位,而這個(gè)偏移量也是根據(jù)Nb的不同而選擇的[3]
③ 在MixColumn變換中,把狀態(tài)中的每一列看作GF(28)上的多項(xiàng)式a(x)與固定多項(xiàng)式c(x)相乘的結(jié)果。 b(x)=c(x)*a(x)的系數(shù)這樣計(jì)算:
*運(yùn)算不是普通的乘法運(yùn)算,而是特殊的運(yùn)算,即 b(x)=c(x)·a(x)(mod x4+1) 對(duì)于這個(gè)運(yùn)算 b0=02。a0+03。a1+a2+a3 令xtime(a0)=02。a0
其中,符號(hào)“。”表示模一個(gè)八次不可約多項(xiàng)式的同余乘法[3]。
對(duì)于逆變化,其矩陣C要改變成相應(yīng)的D,即b(x)=d(x)*a(x)。
④ 密鑰加層運(yùn)算(addround)是將圈密鑰狀態(tài)中的對(duì)應(yīng)字節(jié)按位“異或”。
⑤ 根據(jù)線性變化的性質(zhì)[1],解密運(yùn)算是加密變化的逆變化。這里不再詳細(xì)敘述。
1.2輪變化
對(duì)不同的分組長(zhǎng)度,其對(duì)應(yīng)的輪變化次數(shù)是不同的,如表1所列。
1.3密鑰擴(kuò)展
AES算法利用外部輸入密鑰K(密鑰串的字?jǐn)?shù)為Nk),通過(guò)密鑰的擴(kuò)展程序得到共計(jì)4(Nr+1)字的擴(kuò)展密鑰。它涉及如下三個(gè)模塊:
① 位置變換(rotword)——把一個(gè)4字節(jié)的序列[A,B,C,D]變化成[B,C,D,A];
② S盒變換(subword)——對(duì)一個(gè)4字節(jié)進(jìn)行S盒代替;
③ 變換Rcon[i]——Rcon[i]表示32位比特字[xi-1,00,00,00]。
這里的x是(02),如 Rcon[1]=[01000000];Rcon[2]=[02000000];Rcon[3]=[04000000]……
擴(kuò)展密鑰的生成:擴(kuò)展密鑰的前Nk個(gè)字就是外部密鑰K;以后的字W[[i]]等于它前一個(gè)字W[[i-1]]與前第Nk個(gè)字W[[i-Nk]]的“異或”,即W[[i]]=W[[i-1]]W[[i- Nk]]。但是若i為Nk的倍數(shù),則W[i]=W[i-Nk]Subword(Rotword(W[[i-1]]))Rcon[i/Nk]。
AES的加密與解密流程如圖1所示。
您的評(píng)論需要經(jīng)過(guò)審核才能顯示
有用
有用
有用