資源描述:
《現(xiàn)代密碼學(xué)實(shí)驗(yàn)報(bào)告.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、現(xiàn)代密碼學(xué)實(shí)驗(yàn)報(bào)告學(xué)生姓名學(xué)號(hào)專(zhuān)業(yè)班級(jí)指導(dǎo)教師學(xué)院信息科學(xué)與工程學(xué)院完成時(shí)間2014年5月實(shí)驗(yàn)一對(duì)稱密碼算法實(shí)驗(yàn)[實(shí)驗(yàn)?zāi)康腯1.掌握密碼學(xué)中經(jīng)典的對(duì)稱密碼算法DES、AES、RC4的算法原理。2.掌握DES、AES、RC4的算法流程和實(shí)現(xiàn)方法。[實(shí)驗(yàn)預(yù)備]1.DES算法有什么特點(diǎn)?算法中的哪些結(jié)構(gòu)保證了其混淆和擴(kuò)散的特性?答:分組比較短、密鑰太短、密碼生命周期短、運(yùn)算速度較慢。采用替代和置換的方法簡(jiǎn)單有效地遵循了香農(nóng)定理,替代操作通過(guò)S盒達(dá)到了混淆效果,置換操作通過(guò)P盒擴(kuò)散效果。2.AES算法的基本原理和特點(diǎn)。答:AES加密數(shù)據(jù)塊分組長(zhǎng)度必須為128比特,密鑰長(zhǎng)度可以是12
2、8比特、192比特、256比特中的任意一個(gè)(如果數(shù)據(jù)塊及密鑰長(zhǎng)度不足時(shí),會(huì)補(bǔ)齊)。AES加密有很多輪的重復(fù)和變換。大致步驟如下:1、密鑰擴(kuò)展(KeyExpansion),2、初始輪(InitialRound),3、重復(fù)輪(Rounds),每一輪又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最終輪(FinalRound),最終輪沒(méi)有MixColumns。3.流密碼RC4的密鑰流生成以及S盒初始化過(guò)程。答:RC4由偽隨機(jī)數(shù)生成器和異或運(yùn)算組成。RC4的密鑰長(zhǎng)度可變,圍是[1,255]。RC4一個(gè)字節(jié)一個(gè)字節(jié)地加解密。給定一個(gè)密鑰
3、,偽隨機(jī)數(shù)生成器接受密鑰并產(chǎn)生一個(gè)S盒。S盒用來(lái)加密數(shù)據(jù),而且在加密過(guò)程中S盒會(huì)變化。初始化長(zhǎng)度為256的S盒。第一個(gè)for循環(huán)將0到255的互不重復(fù)的元素裝入S盒。第二個(gè)for循環(huán)根據(jù)密鑰打亂S盒。下面i,j是兩個(gè)指針。每收到一個(gè)字節(jié),就進(jìn)行while循環(huán)。通過(guò)一定的算法((a),(b))定位S盒中的一個(gè)元素,并與輸入字節(jié)異或,得到k。循環(huán)中還改變了S盒((c))。如果輸入的是明文,輸出的就是密文;如果輸入的是密文,輸出的就是明文。[實(shí)驗(yàn)容]1.分析DES、AES、RC4、SHA的實(shí)現(xiàn)過(guò)程。2.用程序設(shè)計(jì)語(yǔ)言將算法過(guò)程編程實(shí)現(xiàn)。3.完成字符串?dāng)?shù)據(jù)的加密運(yùn)算和解密運(yùn)算輸入明
4、文:Idolikethisbook輸入密鑰:cryption[實(shí)驗(yàn)步驟]1.預(yù)習(xí)DES、AES、RC4算法。2.寫(xiě)出算法流程,用程序設(shè)計(jì)語(yǔ)言將算法過(guò)程編程實(shí)現(xiàn)。DES算法流程:代碼:#include"memory.h"#include"stdio.h"#include#include#includeusingnamespacestd;enum{encrypt,decrypt};//ENCRYPT:加密,DECRYPT:解密voiddes_run(charout[8],charin[8],booltype=encrypt
5、);//設(shè)置密鑰voiddes_setkey(constcharkey[8]);staticvoidf_func(boolin[32],constboolki[48]);//f函數(shù)staticvoids_func(boolout[32],constboolin[48]);//s盒代替//變換staticvoidtransform(bool*out,bool*in,constchar*table,intlen);staticvoidxor(bool*ina,constbool*inb,intlen);//異或staticvoidrotatel(bool*in,intlen,i
6、ntloop);//循環(huán)左移//字節(jié)組轉(zhuǎn)換成位組staticvoidbytetobit(bool*out,constchar*in,intbits);//位組轉(zhuǎn)換成字節(jié)組staticvoidbittobyte(char*out,constbool*in,intbits);//置換IP表conststaticcharip_table[64]={58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,5
7、1,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7};//逆置換IP-1表conststaticcharipr_table[64]={40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18