密碼學--AES

一、實驗目的

1、完成AES算法中1輪加密和解密操作

2、掌握AES的4個基本處理步驟

3、理解對稱加密算法的“對稱”思想

?二、實驗內容

1、題目內容描述

(1)利用C語言實現字節代換和逆向字節代換,字節查S盒代換

(2)利用C語言實現行移位和逆向行移位,字節行循環移位

(3)利用C語言實現列混合和逆向列混合字節矩陣乘法

(4)利用C語言實現輪密鑰加,異或

(5)輸入文件名,讀取明文文件,分組實現AES加密(一輪,分組填充時采用空格),將密文存儲在cipher.txt 中。

(6)讀取cipher.txt,實現AES解密(一輪)

(實現GF(28)上的乘法計算,完成一個明文分組的加解密;密鑰固定為"1234567890123456")

  1. 關鍵代碼的設計、實現與執行

①.首先列出S盒和逆S和的二維數組,也可以是一維的,這個可以自己去網上復制,也可以手動:

②.在S盒創建好的基礎上,將明文進行分組,和希爾密碼很像,在不足4*4的矩陣時進行補足,在此仍然使用的是X進行填補,關鍵代碼如下:

?if (m % msize)//補足

????????for (int i = 0;i<msize-m%msize;i++)

????????????plain+='X';//用X補足

③.字節代換就是在第一步創建的S盒中查詢對應的十六進制的數,做出替換就可以了,直接return(其中S[][]就是建立的S盒,n表示相關明文),而逆字節代換相同的方法進行查詢,只是查詢的從對象從S盒變成了逆S盒,關鍵代碼如下:

s[n/16][n%16];

④.行位移就是在第i行整體向左移i個,而對于逆行位移就是在第i行整體向右移i個,關鍵代碼部分如下:

?for (int i=1;i<4;i++) {

????????int ii[4];

????????for (int j=0;j<4;j++)

????????????ii[j]=matrix[i][(4+j-d*i)%4];//行位移傳進去的d=-1,而逆行位移只是將參數d改為了1

????????for (int j=0; j<4; j++)

????????????matrix[i][j]=ii[j];

}

⑤.列混合是用固定矩陣去左乘輸入數據的每列,由于列是不止一個元素的,所以每次乘得的數要進行相加,但是在密碼學中,就是將得到的數值進行異或,而同樣的逆向列混合就是同樣用該列去乘該固定矩陣的逆矩陣,逆矩陣在前面的實驗中做過,只是將二階矩陣換成了四階矩陣,此處需要用到線性代數的知識,關鍵代碼如下:

?for (int i=1;i<8;i++) //有限域上的乘法部分

{

????????a[i]=a[i-1]<<1;

????????if (a[i]-255>0)

????????????a[i]=a[i]^27;

????????a[i]=a[i]&0xff;

????}

????int z=0;

????while (y!=0) {

????????int flag=y&(~y+1);

????????for (int i=0;i<8;i++)

????????????if ((flag>>i)==1)

????????????????flag=i;

????????z=z^a[flag];

????????y=y-pow(2,flag);

????}

for (int i=0; i<4;i++)//異或部分

????????for (int j=0;j<4;j++) ????a[i][j]=GMul(matrix[0][j],Col[i][0])^GMul(matrix[1][j],Col[i][1])^GMul(matrix[2][j],Col[i][2])^GMul(matrix[3][j],Col[i][3]);//將得到的數進行異或

⑥.輪密鑰加密,就是將輸入矩陣和密鑰矩陣進行按位異或,關鍵代碼如下:

for (int i=0;i<4;i++)

????????for (int j=0;j<4;j++) {

????????????k_w[i][j]=ex_key[n*4+j]/pow(16,6-2*i);

????????????ex_key[n*4+j]-=k_w[i][j]*pow(16,6-2*i);

????????}

????for (int i=0;i<4;i++)

????????for (int j=0;j<4;j++)

????????????matrix[i][j]=(matrix[i][j]^k_w[i][j])&0xff;

由于文件的使用操作在實驗1和實驗2中都由,故不做過多贅述,結果截圖如下:

  1. 實驗結果分析

根據上述結果,可以看到空格以及符號也會被算作明文的一個部分,也會占用矩陣的一個位置,并也會對它進行加密解密;而且明文不僅可以為字母也可以為漢字,在最后的解密得到的明文仍然有在明文分組時補足的X,當然也可以去掉,此處只是沒有去掉補足的X,方便觀察補足情況。

三、實驗思考

1、實驗過程總結

在實驗過程中,加強了對AES加密每個環節(字節代換,行位移,列混合,輪密鑰加)的理解,同時認識到了計算機處理和人工處理數據的差別;在此過程中也出現了很多問題,如最開始不知道異或操作怎么實現,經百度后發現^符號即可,其次是在列混合部分也是不知如何下手,在反復觀看視頻,理解深層含義并積累相關知識后得以實現。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79272.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79272.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79272.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【工具記錄分享】提取bilibili視頻字幕

F12大法 教程很多 但方法比較統一 例快速提取視頻字幕&#xff01;適用B站、AI字幕等等。好用 - 嗶哩嗶哩 無腦小工具 嗶哩嗶哩B站字幕下載_在線字幕解析-飛魚視頻下載助手 把鏈接扔進去就會自動生成srt文件 需要txt可以配合&#xff1a; SRT轉為TXT

使用fdisk 、gdisk管理分區

用 fdisk 管理分區 fdisk 命令工具默認將磁盤劃分為 mbr 格式的分區 命令&#xff1a; fdisk 設備名 fdisk 命令以交互方式進行操作的&#xff0c;在菜單中選擇相應功能鍵即可 [rootlocalhost ~]# fdisk /dev/sda # 對 sda 進行分區 Command (m for help): # 進入 fdis…

【Linux基礎】程序和軟件安裝管理命令

目錄 install命令 which命令 install命令 作用&#xff1a;它是用于安裝或復制文件到指定位置&#xff0c;并且可以同時設置文件的權限、所有者和所屬組等屬性。它通常用于腳本中&#xff0c;用于自動化安裝程序或配置文件的部署。 基本用法&#xff1a; install [選項] 源…

C++模板梳理

目錄 函數模板 類模板 變量模板 模板全特化 模板偏特化 模板顯式實例化解決文件分離問題 折疊表達式 模板的二階段編譯 待決名(dependent name) SFINAE 概念與約束 函數模板 函數模板不是函數&#xff0c;只有實例化的函數模板&#xff0c;編譯器才能生成實際的函數…

數據鏈共享:從印巴空戰到工業控制的跨越性應用

摘要 本文通過對印巴空戰中數據鏈共享發揮關鍵作用的分析&#xff0c;引出數據鏈共享在工業控制領域同樣具有重大價值的觀點。深入闡述 DIOS 工業控制操作系統作為工業數據鏈共享基礎技術的特點、架構及應用優勢&#xff0c;對比空戰場景與工業控制場景下數據鏈共享的相…

巡檢機器人數據處理技術的創新與實踐

摘要 隨著科技的飛速發展&#xff0c;巡檢機器人在各行業中逐漸取代人工巡檢&#xff0c;展現出高效、精準、安全等顯著優勢。當前&#xff0c;巡檢機器人已從單純的數據采集階段邁向對采集數據進行深度分析的新階段。本文探討了巡檢機器人替代人工巡檢的現狀及優勢&#xff0c…

在 Flink + Kafka 實時數倉中,如何確保端到端的 Exactly-Once

在 Flink Kafka 構建實時數倉時&#xff0c;確保端到端的 Exactly-Once&#xff08;精確一次&#xff09; 需要從 數據消費&#xff08;Source&#xff09;、處理&#xff08;Processing&#xff09;、寫入&#xff08;Sink&#xff09; 三個階段協同設計&#xff0c;結合 Fli…

當可視化遇上 CesiumJS:突破傳統,打造前沿生產配套方案

CesiumJS 技術基礎介紹 CesiumJS 是一款基于 JavaScript 的開源庫&#xff0c;專門用于創建動態、交互式的地理空間可視化。它利用 WebGL 技術&#xff0c;能夠在網頁瀏覽器中流暢地渲染高分辨率的三維地球和地圖場景。CesiumJS 支持多種地理空間數據格式&#xff0c;包括但不…

RabbitMQ深入學習

繼續上一節的學習&#xff0c;上一節學習了RabbitMQ的基本內容&#xff0c;本節學習RabbitMQ的高級特性。 RocketMQ的高級特性學習見這篇博客 目錄 1.消息可靠性1.1生產者消息確認1.2消息持久化1.3消費者消息確認1.4消費失敗重試機制1.5消息可靠性保證總結 2.什么是死信交換機…

Linux系統:虛擬文件系統與文件緩沖區(語言級內核級)

本節重點 初步理解一切皆文件理解文件緩沖區的分類用戶級文件緩沖區與內核級文件緩沖區用戶級文件緩沖區的刷新機制兩級緩沖區的分層協作 一、虛擬文件系統 1.1 理解“一切皆文件” 我們都知道操作系統訪問不同的外部設備&#xff08;顯示器、磁盤、鍵盤、鼠標、網卡&#…

在c++中老是碰到string,這是什么意思?

定義一個string類型變量的引用&#xff0c;相當于給現有變量起個別名&#xff0c;與指針還是不一樣的。比如string a;string& ba;這兩句&#xff0c;b與a實際上是一回事&#xff0c;表示的是同一塊內存。 std是系統的一個命名空間(有關命名空間可以參閱namespace_百度百科)…

Day21 奇異值分解(SVD)全面解析

一、奇異值分解概述 奇異值分解是線性代數中一個重要的矩陣分解方法&#xff0c;對于任何矩陣&#xff0c;無論是結構化數據轉化成的“樣本 * 特征”矩陣&#xff0c;還是天然以矩陣形式存在的圖像數據&#xff0c;都能進行等價的奇異值分解&#xff08;SVD&#xff09;。 二…

akshare爬蟲限制,pywencai頻繁升級個人做量化,穩定數據源和券商的選擇

做量化&#xff0c;數據和交易接口是策略和自動化交易的基石&#xff0c;而穩定的數據和快人一步的交易接口是個人做量化的催化劑。 之前寫過一篇文章&#xff1a;個人做量化常用的數據&#xff0c;多以爬蟲為主&#xff0c;最近akshare爬蟲限制&#xff0c;pywencai頻繁升級。…

數字簽名與證書

1. 數字簽名與證書 摘要算法用來實現完整性&#xff0c;能夠為數據生成獨一無二的“指紋”&#xff0c;常用的算法是 SHA-2&#xff1b;數字簽名是私鑰對摘要的加密&#xff0c;可以由公鑰解密后驗證&#xff0c;實現身份認證和不可否認&#xff1b;公鑰的分發需要使用數字證書…

Ubuntu22.04安裝顯卡驅動/卸載顯卡驅動

報錯 今日輸入nvidia-smi報錯,在安裝了535和550,包括560都沒辦法解決,但是又怕亂搞導致環境損壞,打算把顯卡卸載然后重新安裝系統默認推薦版本的顯卡驅動 qinqin:~$ nvidia-smi Failed to initialize NVML: Driver/library version mismatch NVML library version: 560.35卸載…

Web 架構之負載均衡全解析

文章目錄 一、引言二、思維導圖三、負載均衡的定義與作用定義作用1. 提高可用性2. 增強性能3. 實現擴展性 四、負載均衡類型硬件負載均衡代表設備優缺點 軟件負載均衡應用層負載均衡代表軟件優缺點 網絡層負載均衡代表軟件優缺點 五、負載均衡算法輪詢算法&#xff08;Round Ro…

linux下的Redis的編譯安裝與配置

配合做開發經常會用到redis&#xff0c;整理下編譯安裝配置過程&#xff0c;僅供參考&#xff01; --------------------------------------Redis的安裝與配置-------------------------------------- 下載 wget https://download.redis.io/releases/redis-6.2.6.tar.gz tar…

A2A大模型協議及Java示例

A2A大模型協議概述 1. 協議作用 A2A協議旨在解決以下問題&#xff1a; 數據交換&#xff1a;不同應用程序之間的數據格式可能不一致&#xff0c;A2A協議通過定義統一的接口和數據格式解決這一問題。模型調用&#xff1a;提供標準化的接口&#xff0c;使得外部應用可以輕松調…

關鍵點檢測--使用YOLOv8對Leeds Sports Pose(LSP)關鍵點檢測

目錄 1. Leeds Sports Pose數據集下載2. 數據集處理2.1 獲取標簽2.2 將圖像文件和標簽文件處理成YOLO能使用的格式 3. 用YOLOv8進行訓練3.1 訓練3.2 預測 1. Leeds Sports Pose數據集下載 從kaggle官網下載這個數據集&#xff0c;地址為link&#xff0c;下載好的數據集文件如下…

20250508在WIN10下使用移遠的4G模塊EC200A-CN直接上網

1、在WIN10/11下安裝驅動程序&#xff1a;Quectel_Windows_USB_DriverA_Customer_V1.1.13.zip 2、使用移遠的專用串口工具&#xff1a;QCOM_V1.8.2.7z QCOM_V1.8.2_win64.exe 3、配置串口UART42/COM42【移遠會自動生成連續三個串口&#xff0c;最小的那一個】 AT命令&#xf…