2022年AES加密算法实验报告.pdf

上传人:C****o 文档编号:12737263 上传时间:2022-04-25 格式:PDF 页数:13 大小:196.83KB
返回 下载 相关 举报
2022年AES加密算法实验报告.pdf_第1页
第1页 / 共13页
2022年AES加密算法实验报告.pdf_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《2022年AES加密算法实验报告.pdf》由会员分享,可在线阅读,更多相关《2022年AES加密算法实验报告.pdf(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验报告学号:姓名:专业:班级:第 10 周课程名称密码学与网络安全实验课时2实验项目AES加密算法实验时间实验目的完成 AES加密算法,实现图片加密与解密,并将加密后的结果以图片格式保存。实验环境PC机,Windows7操作系统, Visual C+ 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 13 页 - - - - - - - - - - 实验内容(算法、程序、步骤和方法)一、简介美国国家标准技术研究所在2001 年发布了高级加密标准( AES )。AES是一个对称加密算法,旨在取代

2、DES 成为广泛使用的标准。AES中的所有运算都是在8 为的字节上运行的。特别饿,加减乘除算术都是在有限域 GF(28) 上运行的。二、程序特点本次试验中要求对图片进行加密与解密,并将加密结果以图片格式进行保存。因此为了实现对图片的调度及保存,使用头文件进行对图片的操作,实现对图片的像素读取,图片的保存。在程序运行读取需要加密的图片时,需要进行图片的选取, 本次实验中使用在弹窗中选取文件的方式,使用头文件来实现在文件夹中选择需要的文件的选取。三、加密算法流程AES加密算法流程如下字节代替:用一个S盒完成分组的字节到字节的代替;行移位:进行一次行上的置换;列混合:利用有限域GF(28) 上的运算

3、特性的一个代替;轮密钥加:当前分组和扩展密钥的一部分进行按位异或。四、代码实现#include#includeclassplaintextpublic :plaintext();staticvoid createplaintext(unsignedchar a);精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 13 页 - - - - - - - - - - staticvoid SubBytes( unsignedchar p16);staticvoid inSubBytes(unsigne

4、dchar p16);staticvoid ShiftRows(unsignedchar e);staticvoid inShiftRows(unsignedchar e);staticvoid MatrixToByte(unsigned char e);staticvoid inMatrixToByte(unsigned char e);staticunsignedchar FFmul( unsigned char a, unsigned char b);staticvoid KeyAdding( unsignedchar state16, unsignedchar k4);staticvo

5、id KeyExpansion( unsigned char* key, unsignedchar w44);plaintext();private:;#includeusingnamespace std;staticunsignedchar sBox = ;/ 定义加密 S盒/unsignedchar insBox256 =;/ 定义解密 S盒plaintext:plaintext()voidplaintext:createplaintext(unsignedchar a) / 创建明文int i = 0;unsignedint p16;for ( int j = 0; j200; j+)i

6、f ( aj = 0)break ;for (; i16; i+)pi = ai;ai = ai + 16;精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 13 页 - - - - - - - - - - voidplaintext:SubBytes( unsignedcharp16) / 字节变换函数unsignedchar b16;for ( int i = 0; i16; i+)bi = sBox(int ) pi;voidplaintext:inSubBytes(unsignedcha

7、r p16) / 逆字节变换函数unsignedchar b16;for ( int i = 0; i16; i+)bi = insBox(int ) pi;voidplaintext:ShiftRows(unsignedchar e) / 行移位变换函数unsignedchar t4;for ( int i = 1; i4; i+)for ( int x = 0; x4; x+)tx = ex + i * 4;for ( int y = 0; y4; y+)e(y + 4 - i) % 4 + i * 4 = ty;voidplaintext:inShiftRows(unsignedchar

8、 e) / 逆行移位变换函数unsignedchar t4;精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 13 页 - - - - - - - - - - for ( int i = 1; i4; i+)for ( int x = 0; x4; x+)tx = ex + i * 4;for ( int y = 0; y4; y+)e(y + i) % 4 + i * 4 = ty;voidplaintext:MatrixToByte(unsigned chare) / 列混合变换函数unsi

9、gnedchar t4;int r, c;for (c = 0; c 4; c+)for (r = 0; r4; r+)tr = er * 4 + c;for (r = 0; r4; r+)er * 4 + c = FFmul(0 x02, tr) FFmul(0 x03, t(r + 1) % 4) FFmul(0 x01, t(r + 2) % 4) FFmul(0 x01, t(r + 3) % 4);voidplaintext:inMatrixToByte(unsigned chare) / 逆列混合变换函数unsignedchar t4;int r, c;for (c = 0; c

10、4; c+)for (r = 0; r4; r+)tr = er * 4 + c;for (r = 0; r4; r+)精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 13 页 - - - - - - - - - - er * 4 + c = FFmul(0 x0e, tr) FFmul(0 x0b, t(r + 1) % 4) FFmul(0 x0d, t(r + 2) % 4) FFmul(0 x09, t(r + 3) % 4);unsignedcharplaintext:FFmul(

11、unsigned chara, unsignedcharb)unsignedchar bw4;unsignedchar res = 0;int i;bw0 = b;for (i = 1; i4; i+)bwi = bwi - 1 1;if (bwi - 1 & 0 x80)bwi = 0 x1b;for (i = 0; i i) & 0 x01)res = bwi;return res;voidplaintext:KeyAdding( unsignedchar state 16, unsignedchar k4)/ 轮密钥加int r, c;for (c = 0; c4; c+)for (r

12、= 0; r4; r+)state r + c * 4 = krc;精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 13 页 - - - - - - - - - - voidplaintext:KeyExpansion(unsigned char * key, unsignedchar w44)/ 密钥扩展int i, j, r, c;unsigned char rc = 0 x01, 0 x02, 0 x04, 0 x08, 0 x10, 0 x20, 0 x40, 0 x80, 0 x1b

13、, 0 x36 ;for (r = 0; r4; r+)for (c = 0; c4; c+)w0rc = keyr + c * 4;for (i = 1; i = 10; i+)for (j = 0; j4; j+)unsignedchar t4;for (r = 0; r4; r+)tr = j ? wirj - 1 : wi - 1r3;if (j = 0)unsigned char temp = t0;for (r = 0; r3; r+)tr = sBoxt(r + 1) % 4;t3 = sBoxtemp;t0 = rci - 1;for (r = 0; r4; r+)w irj

14、= wi - 1rj tr;plaintext:plaintext()精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 13 页 - - - - - - - - - - #include #include #include / 使用文件选取功能#includeusingnamespace std;unsignedchar w1144 = 0 ;int len = 0;/ 图片每行需要加密的长度void Cipher();/ 加密图片void inCipher();/ 解密图片void Ciphe

15、r(unsigned char a)unsignedchar b16;for ( int i = 0; i (len / 16); i+)for ( int j = 0; j16; 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; m16; m+

16、)am + i * 16 = bm;void inCipher(unsigned chara)unsignedchar b16;for ( int i = 0; i (len / 16) ; i+)for ( int j = 0; j= 0; n-)plaintext:inShiftRows(b);plaintext:inSubBytes(b);plaintext:KeyAdding(b, wn);if (n) plaintext:inMatrixToByte(b);for ( int m = 0; m16; m+)am + i * 16 = bm;bool ImageCopy( constC

17、Image &srcImage , CImage &destImage)int i, j;/ 循环变量if ()returnFALSE ;/ 源图像参数BYTE * srcPtr = (BYTE *)();int srcBitsCount = ();int srcWidth = ();int srcHeight = ();int srcPitch = ();/ 销毁原有图像if (!()();/ 创建新图像if (srcBitsCount = 32) / 支持 alpha 通道(srcWidth, srcHeight, srcBitsCount, 1);else(srcWidth, srcHe

18、ight, srcBitsCount, 0);BYTE *destPtr = (BYTE *)();精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 13 页 - - - - - - - - - - int destPitch = ();len=abs(srcPitch);for ( int i = 0; isrcHeight; i+)Cipher(srcPtr + i*srcPitch);/ 复制图像数据for (i = 0; isrcHeight; i+)memcpy(destPtr + i

19、*destPitch, srcPtr + i*srcPitch, abs(srcPitch);returnTRUE ;bool inImageCopy( constCImage &srcImage , CImage &destImage )int i, j;/ 循环变量if ()returnFALSE ;/ 源图像参数BYTE * srcPtr = (BYTE *)();int srcBitsCount = ();int srcWidth = ();int srcHeight = ();int srcPitch = ();/ 销毁原有图像if (!()();/ 创建新图像if (srcBits

20、Count = 32) / 支持 alpha 通道(srcWidth, srcHeight, srcBitsCount, 1);else(srcWidth, srcHeight, srcBitsCount, 0);精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 13 页 - - - - - - - - - - BYTE *destPtr = (BYTE *)();int destPitch = ();len = abs(srcPitch);for ( int i = 0; isrcHeigh

21、t; i+)inCipher(srcPtr + i*srcPitch);/ 复制图像数据for (i = 0; isrcHeight; i+)memcpy(destPtr + i*destPitch, srcPtr + i*srcPitch, abs(srcPitch);returnTRUE ;int main()unsignedchar key16 = / 固定密钥0 x77, 0 x59, 0 xc5, 0 xa4,0 x55, 0 x90, 0 xa4, 0 xa3,0 xb2, 0 xcc, 0 x01, 0 xa9,0 xcb, 0 xac, 0 x77, 0 x23 ;plaint

22、ext:KeyExpansion(key, w);TCHAR szBufferMAX_PATH = 0 ;/ 使用文件选取功能OPENFILENAME ofn = 0 ; = sizeof (ofn);/ = m_hWnd; = _T( ); / 要选择的文件后缀 = _T( D:); / 默认的文件路径 = szBuffer;/ 存放文件的缓冲区 = sizeof (szBuffer) / sizeof (*szBuffer); = 0; = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER; / 标志如果是多选要加上OFN_ALLOW

23、MULTISELECT BOOL bSel = GetOpenFileName(&ofn);CImage image, image2, image3;/ 读取图片(szBuffer);精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 13 页 - - - - - - - - - - ImageCopy(image, image2);( e:/);inImageCopy(image2, image3);( e:/);system( pause );本数据记录和计算运行程序,出现选择图片界面加密结

24、束原图片加密图片解密图片精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 13 页 - - - - - - - - - - 结论(结果)?根据结果显示,程序成功的实现了对图片的加密,得到的加密后的结果仍然为图片,并成功地的解密得到了正确的解密后的图片。小结?通过本次试验,成功的完成了对AES密码算法的初步编写,了解了AES算法的工作原理。对于图片加密方面,掌握了新的调用图片的方法,使用头文件大大简化了c+中对图片调用的难度。同时在文件读取方面使用了头文件,使得程序在使用上更加方便。指导老师评议?成绩评定:指导教师签名:精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 13 页 - - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁