




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上四 川 大 学 计 算 机 学 院、软 件 学 院实 验 报 告 学号:姓名:专业: 班级: 第 10 周课程名称 密码学与网络安全实验课时2实验项目AES加密算法实验时间2015.5.7实验目的 完成AES加密算法,实现图片加密与解密,并将加密后的结果以图片格式保存。实验环境 PC机,Windows7操作系统,Visual C+ 6.0实验内容(算法、程序、步骤和方法) 一、 简介美国国家标准技术研究所在2001年发布了高级加密标准(AES)。AES是一个对称加密算法,旨在取代DES成为广泛使用的标准。AES中的所有运算都是在8为的字节上运行的。特别饿,加减乘除算术
2、都是在有限域GF(28)上运行的。二、 程序特点本次试验中要求对图片进行加密与解密,并将加密结果以图片格式进行保存。因此为了实现对图片的调度及保存,使用头文件atlimage.h进行对图片的操作,实现对图片的像素读取,图片的保存。在程序运行读取需要加密的图片时,需要进行图片的选取,本次实验中使用在弹窗中选取文件的方式,使用头文件commdlg.h来实现在文件夹中选择需要的文件的选取。三、 加密算法流程AES加密算法流程如下字节代替:用一个S盒完成分组的字节到字节的代替;行移位:进行一次行上的置换;列混合:利用有限域GF(28)上的运算特性的一个代替;轮密钥加:当前分组和扩展密钥的一部分进行按位
3、异或。四、 代码实现cryptograph.h#include <string>#include <iostream>class plaintextpublic:plaintext();static void createplaintext(unsigned char a);static void SubBytes(unsigned char p16);static void inSubBytes(unsigned char p16);static void ShiftRows(unsigned char e);static void inShiftRows(unsig
4、ned char e);static void MatrixToByte(unsigned char e);static void inMatrixToByte(unsigned char e);static unsigned char FFmul(unsigned char a, unsigned char b);static void KeyAdding(unsigned char state16, unsigned char k4);static void KeyExpansion(unsigned char* key, unsigned char w44);plaintext();pr
5、ivate:;cryptograph.cpp#include "cryptography.h"using namespace std;static unsigned char sBox = ;/定义加密S盒/unsigned char insBox256 =;/定义解密S盒plaintext:plaintext()void plaintext:createplaintext(unsigned char a)/创建明文int i = 0;unsigned int p16;for (int j = 0; j<200; j+)if (aj = 0)break;for (;
6、i<16; i+)pi = ai;ai = ai + 16;void plaintext:SubBytes(unsigned char p16)/字节变换函数unsigned char b16;for (int i = 0; i<16; i+)bi = sBox(int)pi;void plaintext:inSubBytes(unsigned char p16)/逆字节变换函数unsigned char b16;for (int i = 0; i<16; i+)bi = insBox(int)pi;void plaintext:ShiftRows(unsigned char
7、 e)/行移位变换函数unsigned char t4;for (int i = 1; i<4; i+)for (int x = 0; x<4; x+)tx = ex + i * 4;for (int y = 0; y<4; y+)e(y + 4 - i) % 4 + i * 4 = ty;void plaintext:inShiftRows(unsigned char e)/逆行移位变换函数unsigned char t4;for (int i = 1; i<4; i+)for (int x = 0; x<4; x+)tx = ex + i * 4;for (i
8、nt y = 0; y<4; y+)e(y + i) % 4 + i * 4 = ty;void plaintext:MatrixToByte(unsigned char e)/列混合变换函数unsigned char t4;int r, c;for (c = 0; c< 4; c+)for (r = 0; r<4; r+)tr = er * 4 + c;for (r = 0; r<4; r+)er * 4 + c = FFmul(0x02, tr) FFmul(0x03, t(r + 1) % 4) FFmul(0x01, t(r + 2) % 4) FFmul(0x
9、01, t(r + 3) % 4);void plaintext:inMatrixToByte(unsigned char e)/逆列混合变换函数unsigned char t4;int r, c;for (c = 0; c< 4; c+)for (r = 0; r<4; r+)tr = er * 4 + c;for (r = 0; r<4; r+)er * 4 + c = FFmul(0x0e, tr) FFmul(0x0b, t(r + 1) % 4) FFmul(0x0d, t(r + 2) % 4) FFmul(0x09, t(r + 3) % 4);unsigned
10、 char plaintext:FFmul(unsigned char a, unsigned char b)unsigned char bw4;unsigned char res = 0;int i;bw0 = b;for (i = 1; i<4; i+)bwi = bwi - 1 << 1;if (bwi - 1 & 0x80)bwi = 0x1b;for (i = 0; i<4; i+)if (a >> i) & 0x01)res = bwi;return res;void plaintext:KeyAdding(unsigned ch
11、ar state16, unsigned char k4)/轮密钥加int r, c;for (c = 0; c<4; c+)for (r = 0; r<4; r+)stater + c * 4 = krc;void plaintext:KeyExpansion(unsigned char* key, unsigned char w44)/密钥扩展int i, j, r, c;unsigned char rc = 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36 ;for (r = 0; r<4; r+)fo
12、r (c = 0; c<4; c+)w0rc = keyr + c * 4;for (i = 1; i <= 10; i+)for (j = 0; j<4; j+)unsigned char t4;for (r = 0; r<4; r+)tr = j ? wirj - 1 : wi - 1r3;if (j = 0)unsigned char temp = t0;for (r = 0; r<3; r+)tr = sBoxt(r + 1) % 4;t3 = sBoxtemp;t0 = rci - 1;for (r = 0; r<4; r+)wirj = wi -
13、 1rj tr;plaintext:plaintext()main.cpp#include<iostream>#include<atlimage.h>#include<commdlg.h>/使用文件选取功能#include "cryptography.h"using namespace std;unsigned char w1144 = 0 ;int len = 0;/图片每行需要加密的长度void Cipher();/加密图片void inCipher();/解密图片void Cipher(unsigned char a)unsigne
14、d char b16;for (int i = 0; i < (len / 16); i+)for (int j = 0; j<16; j+)bj = aj + i * 16;plaintext:KeyAdding(b, w0);for (int n = 1; n <= 10; n+)plaintext:SubBytes(b);plaintext:ShiftRows(b);if (n != 10)plaintext:MatrixToByte(b);plaintext:KeyAdding(b, wn);for (int m = 0; m<16; m+)am + i * 1
15、6 = bm;void inCipher(unsigned char a)unsigned char b16;for (int i = 0; i < (len / 16) ; i+)for (int j = 0; j<16; j+)bj = aj + i * 16;plaintext:KeyAdding(b, w10);for (int n = 9; n >= 0; n-)plaintext:inShiftRows(b);plaintext:inSubBytes(b);plaintext:KeyAdding(b, wn);if (n)plaintext:inMatrixToB
16、yte(b);for (int m = 0; m<16; m+)am + i * 16 = bm;bool ImageCopy(const CImage &srcImage, CImage &destImage)int i, j;/循环变量if (srcImage.IsNull()return FALSE;/源图像参数BYTE* srcPtr = (BYTE*)srcImage.GetBits();int srcBitsCount = srcImage.GetBPP();int srcWidth = srcImage.GetWidth();int srcHeight =
17、srcImage.GetHeight();int srcPitch = srcImage.GetPitch();/销毁原有图像if (!destImage.IsNull()destImage.Destroy();/创建新图像if (srcBitsCount = 32) /支持alpha通道destImage.Create(srcWidth, srcHeight, srcBitsCount, 1);elsedestImage.Create(srcWidth, srcHeight, srcBitsCount, 0);BYTE *destPtr = (BYTE*)destImage.GetBits(
18、);int destPitch = destImage.GetPitch();len=abs(srcPitch);for (int i = 0; i<srcHeight; i+)Cipher(srcPtr + i*srcPitch);/复制图像数据for (i = 0; i<srcHeight; i+)memcpy(destPtr + i*destPitch, srcPtr + i*srcPitch, abs(srcPitch);return TRUE;bool inImageCopy(const CImage &srcImage, CImage &destImag
19、e)int i, j;/循环变量if (srcImage.IsNull()return FALSE;/源图像参数BYTE* srcPtr = (BYTE*)srcImage.GetBits();int srcBitsCount = srcImage.GetBPP();int srcWidth = srcImage.GetWidth();int srcHeight = srcImage.GetHeight();int srcPitch = srcImage.GetPitch();/销毁原有图像if (!destImage.IsNull()destImage.Destroy();/创建新图像if
20、(srcBitsCount = 32) /支持alpha通道destImage.Create(srcWidth, srcHeight, srcBitsCount, 1);elsedestImage.Create(srcWidth, srcHeight, srcBitsCount, 0);BYTE *destPtr = (BYTE*)destImage.GetBits();int destPitch = destImage.GetPitch();len = abs(srcPitch);for (int i = 0; i<srcHeight; i+)inCipher(srcPtr + i*s
21、rcPitch);/复制图像数据for (i = 0; i<srcHeight; i+)memcpy(destPtr + i*destPitch, srcPtr + i*srcPitch, abs(srcPitch);return TRUE;int main()unsigned char key16 = /固定密钥0x77, 0x59, 0xc5, 0xa4,0x55, 0x90, 0xa4, 0xa3,0xb2, 0xcc, 0x01, 0xa9,0xcb, 0xac, 0x77, 0x23 ;plaintext:KeyExpansion(key, w);TCHAR szBufferMAX_PATH = 0 ;/使用文件选取功能OPENFILENAME ofn = 0 ;ofn.lStructSize = sizeof(ofn);/ofn.hwndOwner = m_hWnd;ofn.lpstrFilter = _T("");/要选择的文件后缀 ofn.lpstrInitialDir = _T("D:");/默认的文件路径 ofn.lpstrFile = szBuffer;/存放文件的缓冲区
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/HNBWA 3-2022金属膜增强型自粘防水卷材
- 新生儿血糖异常及护理
- 脾破裂急救护理查房
- java面试ssm框架面试题及答案
- c语言补考试题及答案
- 孔隙结构与孔隙水饱和度对水工混凝土强度的影响研究
- NHE7上调通过增强肝细胞癌中巨胞饮体的成熟来增强小细胞外囊泡的摄取
- 城市记忆视角下郑州国棉厂区文创产品设计研究
- 基于特征融合和多头注意力的中文命名实体识别的研究与实现
- 基于Rasch模型的初中生英语学科听力能力测评研究
- 2025年化妆师职业技能考试试题及答案
- GA 1812.1-2024银行系统反恐怖防范要求第1部分:人民币发行库
- 2025中信建投证券股份限公司校园招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2025年山东省泰安市新泰市中考二模化学试题(原卷版+解析版)
- 2025年鸡蛋市场调查报告
- 2025年职业技能竞赛(计算机程序员赛项)参考试题(附答案)
- 合伙人商业保密协议书9篇
- 湖北省武汉市2025届高中毕业生四月调研考试语文试卷及答案(武汉四调)
- 2025年全国中小学生百科知识竞赛题库及答案(480题)
- 测控技术培训课件
- 2025年度专业技术人员继续教育公需科目考试题(附答案)
评论
0/150
提交评论