AES密碼學課程設計 C語言實現

2022-10-12 03:24:02 字數 3466 閱讀 3726

des加密解密軟體的實現

課程名稱: 密碼學程式設計

學生姓名: 張浩

學生學號: 130

專業班級: 13級網路工程

任課教師: 陳俊

2016 年 5月 21日

目錄1、選題背景 4

2、設計的目標 4

2.1基本目標: 4

2.2較高目標: 5

3、功能需求分析 5

4、模組劃分 6

4.1、金鑰排程 6

4.2、加密 8

4.2.1、位元組代替(subbytes) 8

4.2.2、行移位(shiftrows) 10

4.2.3、列混合(mixcolumn) 11

4.2.4、輪金鑰加(addroundkey) 13

4.2.5、加密主函式 14

4.3、解密 16

4.3.1、逆位元組替代(invsubbytes) 16

4.3.2、逆行移位(invshiftrows) 17

4.3.3、逆列混合(invmixcloumns) 17

4.3.4、輪金鑰加(addroundkey) 18

4.3.5、解密主函式 18

5.測試報告 20

5.1主介面 20

5.2測試鍵盤輸入明文和金鑰加密 20

5.3測試鍵盤輸入密文和金鑰加密 21

5.3測試檔案輸入明文和金鑰加密 22

5.4測試檔案輸入密文和金鑰加密 22

5.5軟體說明 23

6.課程設計報告總結 23

7.參考文獻 24

des是由美國ibm公司於20世紀70年代中期的密碼演算法發展而來的,在2023年1月15日,美國國家標準局正式公布實施,並得到了iso的認可。在過去近20年的時間裡,des被廣泛應用於美國聯邦和各種商業資訊的安全保密工作中,經受信了各種密碼分析和攻擊,體現出了令人滿意的字全性。但隨著密碼分析技術和計算能力的提高,2023年,美國決定不再使用des演算法,目前des演算法已被更為安全的加解密演算法取代。

雖然這樣,但是目前還無法將des加密演算法徹底破解掉,而且des演算法的加解密演算法非常快,仍是目前使用最為普遍的對稱密碼演算法。在國內,隨著三金工程尤其是金卡工程的啟動,des演算法在pos、atm、磁卡及智慧卡、加汕站、高速公路收費站等領域被廣泛應用,以此來實現關鍵資料的保密,如信用卡人的pin碼加密偉輸,ic卡與pos機之間的雙向認證、金融交易資料報的mac校驗等,均用到des演算法。

基本要求部分:

1.能夠對乙個明文分組進行加密,加密後能夠正確解密。

2.程式執行時可以輸出任一組金鑰。因為實現了對任意長度明加密,所以沒輸出每一輪加密後的結果。因為當明文長度過長時,每一輪加密結果會很多。

3.程式有良好的人機互動操作;

較高要求部分:

1.如果明文不止乙個分組,程式能完成分組,然後加密;最後乙個分組長度不足時要求完成填充;

2.金鑰採用ascii碼,明文輸入資訊可以是文字(可以是漢字或英文,要求不止乙個加密分組長度),任意字元。進行加密後,能夠進行正確的解密;

3. 程式**有比較好的結構,模組劃分合理,用類進行封裝,通過呼叫類的成員函式實現加密解密功能。

2.2主要軟體需求(執行環境)

本軟體用c++語言編寫,編寫時所用的工具主要是vc++6.0。編輯成功後的.cpp檔案可以在裝有windows系統的任何計算機上使用。

測試平台:windows 8.1

使用軟體:vc++6.0

3.1 初始置換ip

將ip盒分為左32位和右32位,將明文左32位和右32位分別進行ip置換,最後既實現了ip置換,同時還將明文分成了左32位和右32位,為下一步做好了準備。

部分**:

for (i = 0; i < 32; i++)

迴圈變數i用來找到ip盒中下標為i的數,ip[i]取出該數,由於計算機中下標是從零開始計算的,而ip[i]表的是明文二進位制中第幾個數,所以應置換成明文二進位制中第ip[i]-1那個數。

3.2 與金鑰進行異或

部分**:

for(i=0;i<48;i與金鑰異或

/*printf("\n進入s盒的48位元:");

for(i=0;i<48;i++)

printf("%d",tmp[i]);

}*/3.3 des加密函式

部分**:

由於加密解密分兩種方式,一種是由鍵盤輸入進行加密解密。另一種是檔案讀入加密解密,下面我們演示由鍵盤進行加解密!

根據數字選擇使用軟體,下面分開測試:

鍵盤輸入1,選擇加密,並輸入:12345678共計8個字元,再任意輸入8字元的金鑰,為方便起見,測試時,輸入為88888888,最後加密成功之後輸出中間金鑰與密文狀態

其中最後加密密文為:3b2c7c7e6829aeda

按0鍵對此文解密,出現解密結果為12345678

按3鍵退出介面

這次課程設計我最大的收穫就是凡事都要自己動手去做,有些事情自己不做,啥子都不會,有畏懼感,膽怯,始終把事情放在那,就形成惡性迴圈,這樣子一直都做不來,一直都不會有進步,所以不管什麼事情都要親自去嘗試一下,難易程度自己感知,不要聽信他人的謠言,或者誤導,以為怎麼怎麼樣。

還有就是,做**的時候查閱了相關的書籍,很雜很亂,這對於選擇有用的材料,有價值的材料進行使用,會提高效率,最開始各種涉獵,很多,但是實用的卻沒有多少,白白耽誤了很多時間。我覺得還是首先了解全域性,了解總體,高屋建瓴,做好準備工作,寫好報告,把每個過程搞懂了,才能動手去寫**,連基本的理論都不懂,就去操作,實在是慢,當然在了解的基礎上,也要去實踐,去檢驗自己的做法是否是對的,不能光搞理論,計算機是乙個動手就得答案的科學,多檢驗,多算,多觀察。這樣子影響更深,更不會忘,一輩子的經驗,自己動手得到的答案,遠比查閱資料了解來的有意義,有效果。

在寫**的時候參考了一些參考資料,發現一些牛人啊,他們寫的**簡介,精煉,確實讓人敬佩,我用很多行**實現的功能,別人兩三句迴圈就解決了,主要是平時沒怎麼編寫**,沒有經驗,還是要多寫**,多領悟,才能有他們的成就。而且我簡介的**都是很好的數學演算法,我學的數學沒怎麼用在這個上面,不能直接用最低階的演算法,最普通的演算法,這樣子永遠不能簡化,要簡化就要用一些數學演算法,下標改變啊,迴圈啊啥的這些可以實現意想不到的效果,實現功能和簡介的雙重母的。多實踐!

最後我要感謝解放軍資訊工程大學的尋者,尋者是他的暱稱,在我除錯過程中,他給了我很大的幫助,真心的不知道說什麼,我有很多的問題都是詢問他解決的,而且那天他花了一整晚上的時間和我一起**,一起專研,幫我除錯,這對於目前乙個物質社會,節奏超快的社會,我真心感覺好幸運,好人還是多,這就堅定了我要做好人的決心。助人為樂,真心感覺很好!特別是那些在需要中的人們是、多麼期盼的幫助。

幫助別人就是幫助自己,萬分感謝尋者!致敬!

[1] 譚浩強.c程式設計(第三版). 北京:清華大學出版社, 2015

[2] 張仕斌.張金全等. 應用密碼學.西安電子科技大學出版社, 2015

[3] 尋者 .des加密演算法c++.

密碼學課程設計探索與實踐

作者 王少輝王志偉 課程教育研究 上 2013年第01期 摘要 密碼學是資訊保安專業的一門專業基礎課,密碼學課程設計是密碼學的重要組成部分。本文以密碼學課程設計的題目設計為出發點,分析了目前資訊保安本科專業實驗課程的現狀,闡述了密碼學課程設計中題目設計應充分地考慮密碼學學科的最新研究成果和計算機技術...

C語言課程設計

高階語言程式設計 院系 工學院 專業 機械工程 年級學生姓名 學號 201301030906 指導教師 題號 第 56 題 2014年6月 1 題目 課程設計題庫第56題 題目解析 題目內容為 求具有abcd ab cd 2性質的四位數 有題目我們可以看出,題目的要求是需要我們找出乙個整形的四位數a...

c語言課程設計

西安郵電大學 c語言課程設計報告 題目學生作業完成情況管理系統 院系名稱計算機學院 專業名稱軟體工程 班級軟體1205班 學生姓名詹盛軍 學號 8位 04123156 指導教師王小銀 設計起止時間 2013年06月02日 2013年06月14日 一.設計目的 1 熟悉c語言程式的編輯 編譯鏈結和執行...