AES加密算法实验报告.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
word格式文档 专业整理 四 川 大 学 计 算 机 学 院、软 件 学 院 实 验 报 告 学号:姓名:专业: 班级: 第 10 周 课程名称 密码学与网络安全 实验课时 2 实验项目 AES加密算法 实验时间 2015.5.7 实验目的 完成AES加密算法,实现图片加密与解密,并将加密后的结果以图片格式保存。 实验环境 PC机,Windows7操作系统,Visual C++ 6.0 实验内容(算法、程序、步骤和方法) 简介 美国国家标准技术研究所在2001年发布了高级加密标准(AES)。AES是一个对称加密算法,旨在取代DES成为广泛使用的标准。 AES中的所有运算都是在8为的字节上运行的。特别饿,加减乘除算术都是在有限域GF(28)上运行的。 程序特点 本次试验中要求对图片进行加密与解密,并将加密结果以图片格式进行保存。因此为了实现对图片的调度及保存,使用头文件atlimage.h进行对图片的操作,实现对图片的像素读取,图片的保存。 在程序运行读取需要加密的图片时,需要进行图片的选取,本次实验中使用在弹窗中选取文件的方式,使用头文件commdlg.h来实现在文件夹中选择需要的文件的选取。 加密算法流程 AES加密算法流程如下 字节代替:用一个S盒完成分组的字节到字节的代替; 行移位:进行一次行上的置换; 列混合:利用有限域GF(28)上的运算特性的一个代替; 轮密钥加:当前分组和扩展密钥的一部分进行按位异或。 代码实现 cryptograph.h #include string #include iostream class plaintext { public: plaintext(); static void createplaintext(unsigned char a[]); static void SubBytes(unsigned char p[16]); static void inSubBytes(unsigned char p[16]); static void ShiftRows(unsigned char e[]); static void inShiftRows(unsigned 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 state[16], unsigned char k[][4]); static void KeyExpansion(unsigned char* key, unsigned char w[][4][4]); ~plaintext(); private: }; cryptograph.cpp #include cryptography.h using namespace std; static unsigned char sBox[] = {};/定义加密S盒/ unsigned char insBox[256] ={};//定义解密S盒 plaintext::plaintext() { } void plaintext::createplaintext(unsigned char a[])//创建明文 { int i = 0; unsigned int p[16]; for (int j = 0; j200; j++) { if (a[j] == 0) { break; } } for (; i16; i++) { p[i] = a[i]; a[i] = a[i + 16]; } } void plaintext::SubBytes(unsigned char p[16])//字节变换函数 { unsigned char b[16]; for (int i = 0; i16; i++) { b[i] = sBox[(int)p[i]]; } } void plaintext::inSubBytes(unsigned char p[16])//逆字节变换函数 { unsigned char b[16]; for (int i = 0; i16; i++) { b[i] = insBox[(int)p[i]]; } } void plainte

您可能关注的文档

文档评论(0)

zxiangd + 关注
实名认证
内容提供者

本人从事教育还有多年,在这和大家互相交流学习

1亿VIP精品文档

相关文档