C語言實(shí)現(xiàn)DES算法實(shí)驗(yàn)報(bào)告

C語言實(shí)現(xiàn)DES算法實(shí)驗(yàn)報(bào)告

ID:47320728

大?。?22.00 KB

頁數(shù):23頁

時(shí)間:2020-01-10

C語言實(shí)現(xiàn)DES算法實(shí)驗(yàn)報(bào)告_第頁
預(yù)覽圖正在加載中,預(yù)計(jì)需要20秒,請(qǐng)耐心等待
資源描述:

《C語言實(shí)現(xiàn)DES算法實(shí)驗(yàn)報(bào)告》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、xx工程大學(xué)實(shí)驗(yàn)報(bào)告(2015-2016學(xué)年第一學(xué)期)報(bào)告題目:DES加密算法課程名稱:密碼學(xué)B任課教員:專業(yè):學(xué)號(hào):姓名:二O一六年一月十八日一、課程概述目的:培養(yǎng)學(xué)員的編程能力,理解算法原理。要求:給出DES算法的軟件實(shí)現(xiàn),測(cè)試DES的加密速度。二、設(shè)計(jì)思路使用C++語言進(jìn)行編程,簡(jiǎn)化了輸入輸出語句。預(yù)處理時(shí)加入了iostream包。使用了std名字空間。加密時(shí)程序輸入的明文是8個(gè)ascii碼,生成一個(gè)16個(gè)16進(jìn)制數(shù)的密文。脫密時(shí)程序輸入的密文是16個(gè)16進(jìn)制數(shù),生成一個(gè)8個(gè)ascii碼的明文。加脫

2、密所用密鑰均由16個(gè)16進(jìn)制數(shù)組成。其中16進(jìn)制數(shù)全部使用大寫字母。程序中大量使用了的布爾數(shù)組,一個(gè)bool型變量只占用一位存儲(chǔ)空間,比int型、char型變量要小的多。這降低了程序的空間復(fù)雜度。三、采取的方案本程序是將一個(gè)由8個(gè)ascii碼組成的明文分組加密,生成一個(gè)由16個(gè)16進(jìn)制數(shù)組成的密文?;?qū)⒁粋€(gè)由16個(gè)16進(jìn)制數(shù)組成的密文進(jìn)行脫密,生成一個(gè)由8個(gè)ascii碼組成的明文。所用密鑰由16個(gè)16進(jìn)制數(shù)組成。本實(shí)驗(yàn)按照輸入數(shù)據(jù)及初始置換、16圈迭代、子密鑰生成和逆初始置換及輸出數(shù)據(jù)四個(gè)步驟實(shí)現(xiàn)加密算法

3、設(shè)計(jì)。1、輸入數(shù)據(jù)及初始置換本程序首先會(huì)提示用戶輸入加密脫密識(shí)別碼,加密輸入1,脫密輸入0,將此識(shí)別碼存入整形變量o。根據(jù)o的不同值,提示用戶輸入8個(gè)字符(加密)或16個(gè)16進(jìn)制數(shù)(脫密)。輸入的明文或密文轉(zhuǎn)化為二進(jìn)制數(shù)后儲(chǔ)存到布爾型數(shù)組m[65]中。初始置換通過函數(shù)IP完成,函數(shù)輸入為原始明文m,函數(shù)將輸出結(jié)果保存到布爾型數(shù)組mip[65]中。函數(shù)思想為查表,含有一個(gè)整形變量數(shù)組ip[64],保存初始變換表IP。將mip的第i位賦值為m的第ip[i]位。2、子密鑰生成輸入16個(gè)16進(jìn)制數(shù)的密鑰后,將密鑰

4、保存在一個(gè)16位字符數(shù)組c中,通過ToEr函數(shù)將之變?yōu)槎M(jìn)制數(shù)。ToEr函數(shù)輸入為字符數(shù)組,通過switch語句逐個(gè)檢查字符數(shù)組的每一位,將對(duì)應(yīng)的四位二進(jìn)制數(shù)存在64位布爾數(shù)組k中。64bit密鑰去掉每個(gè)字節(jié)的最高位得到56bit密鑰輸入,通過置換選擇1變換得到和各28bit,通過Zhihuan_1函數(shù)實(shí)現(xiàn)置換選擇一。Zhihuan_1函數(shù)輸入為二進(jìn)制密鑰數(shù)組k[64],輸出為C0和D0,將C0、D0分別儲(chǔ)存在28位布爾數(shù)組C、D中。函數(shù)采用查表方式生成C0和D0。根據(jù)迭代的輪數(shù)確定C和D移位循環(huán)的位數(shù),

5、主程序中利用一個(gè)16位整形數(shù)組來存放每一次循環(huán)左移的位數(shù)。循環(huán)左移通過XunHuan函數(shù)實(shí)現(xiàn),函數(shù)輸入為循環(huán)位數(shù)和長度為28的布爾數(shù)組(C或者D),函數(shù)運(yùn)行一次只能改變一個(gè)布爾數(shù)組的值。為了減低編程復(fù)雜度,程序使用串行方法,分兩次進(jìn)行C、D的移位。每完成一次C和D的移位,進(jìn)行一次置換選擇二。置換選擇二利用zhihuan_2函數(shù)完成。思想和Zhihuan_1函數(shù)類似。zhihuan_2函數(shù)輸入為移位后的C、D,zhihuan_2函數(shù)將圈子密鑰存放在16*48的二維布爾數(shù)組kk[17][49]中。kk[i][

6、48]表示第i圈的圈子密鑰。原理圖如圖1所示。脫密(o=0時(shí))需要將圈子密鑰交換,此時(shí)可利用kk[0][49]充當(dāng)中間變量,無需定義新的變量減少了系統(tǒng)開銷。圖1圈子密鑰生成算法3、16圈迭代DES的每一圈迭代采用的是Feistel模型,先將初始置換后的明文mip數(shù)組分成L和R兩部分,先將R的內(nèi)容放在等長的布爾數(shù)組T中,最后時(shí)需要將L的值賦為T。之后進(jìn)入F函數(shù),F(xiàn)函數(shù)原理如圖2。圖2F函數(shù)原理圖程序中的F函數(shù)輸入有初始置換結(jié)果的右半部分R、圈子密鑰kk、迭代圈數(shù)i。輸出保存在R中。先將輸入的R通過查表的方法

7、進(jìn)行E拓展,結(jié)果保存在48位布爾數(shù)組a中。再將a與圈子密鑰k按位模二加。結(jié)果保存在a中。接下來將a分成8組,分別進(jìn)入8個(gè)S盒。用for控制循環(huán)8次,每次操作選用6位二進(jìn)制代碼的開頭一位和最后一位轉(zhuǎn)化成十進(jìn)制數(shù),控制S盒的行數(shù),再將6位二進(jìn)制代碼的中間四位轉(zhuǎn)化成十進(jìn)制數(shù),控制S盒的列數(shù)。進(jìn)入第幾個(gè)S盒有迭代圈數(shù)i確定。取到S盒中的十進(jìn)制數(shù)后,將它轉(zhuǎn)化成二進(jìn)制數(shù),儲(chǔ)存在32位布爾數(shù)組T中,在使用查表法完成P盒置換,最終結(jié)果保存在R中。最后將L與R按位模二加,得到新的R,完成一次迭代。4、逆初始置換16次迭代后

8、,先將L16和R16連接起來,保存到64位布爾數(shù)組m中,m之前用于保存明文,這樣減小了程序占用的空間。另外,為了保證加脫密算法的一致性,迭代時(shí)最后一圈不需要交換L與R,但程序中為了簡(jiǎn)化編程復(fù)雜度,在迭代時(shí)仍然交換了L與R。所以在連接時(shí)需要再次交換L與R。所以m的高32位應(yīng)儲(chǔ)存R,低32位應(yīng)儲(chǔ)存L。逆初始置換原理同初始置換步驟,不再贅述。四、取得的成果利用密鑰201601211438FBCA對(duì)明文81623317加密,密文為6B

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。