成都信息工程学院
课程设计报告
AES加密解密的实现
课程名称:应用密码算法程序设计
学生姓名:
学生学号:
专业班级:
任课教师:
年 月 日
附件:课程设计成绩评价表 指导老师评阅成绩表 | |||||||||||||||||
学习与工作态度(30%) | 选题意义(10%) | 文献综述(10%) | 研究水平与设计能力(20%) | 课程设计说明说(论文)撰写质量(20%) | 设计创新(10%) | 总分 | |||||||||||
指导老师签名: 年 月 日 | |||||||||||||||||
课程设计答辩记录及评价表 | |||||||||||||||||
学生 讲述情况 | |||||||||||||||||
教师主要 提问记录 | |||||||||||||||||
学生回答 问题情况 归亚蕾主演的电视剧 | 音频怪物 | ||||||||||||||||
网吧怎么关防火墙答辩评分 | 评分项目 | 分值 | 评价参考标准 | 评分 | 总分 | ||||||||||||
优 | 良 | 中 | 及格 | 差 | |||||||||||||
选题意义 | 10 | 9 | 8 | 7 | 6 | 4 | |||||||||||
文献综述 | 10 | 9 | 8 | 7 | 6 | 4 | |||||||||||
研究水平与设计能力 | 20 | 19 | 17 | 15 | 13 | 10 | |||||||||||
课程设计说明书(论文)撰写质量 | 20 | 19精忠岳飞刘诗诗 | 17 | 15 | 13 | 10 | |||||||||||
设计创新 | 10 | 9 | 8 | 7 | 6 | 4 | |||||||||||
答辩效果 | 30 | 28 | 25 | 22 | 19 | 15 | |||||||||||
答辩小组成员签名 | |||||||||||||||||
答辩小组组长签名: 年 月 日 | |||||||||||||||||
课程设计成绩评定表 | |||||||||||||||||
成绩汇总 | 评分项目 | 评分 | 比例 | 分数 | 课程设计总分 | ||||||||||||
指导老师评分 | 50% | ||||||||||||||||
答辩小组评分 | 50% | ||||||||||||||||
1. 背景
AES,密码学中的高级加密标准(Advanced Encryption Standard,AES),又称 Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。AES 有一个固定的128位的块大小和128,192或256位大小的密钥大小。
该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。(Rijdael的发音近于 "Rhine doll"。)AES在软体及硬件上都能快速地加解密,相对来说较易于实作,且只需要很少的记忆体。作为一个新的加密标准,目前正被部署应用到更广大的范围.
2.系统设计
2.1系统主要目标
基本要求部分:
1.在深入理解AES加密/解密算法理论的基础上,设计一个AES加密/解密软件系统;
2.完成一个明文分组的加解密,明文和密钥是十六进制,长度都为64比特(16个16进制数),输入明文和密钥,输出密文,进行加密后,能够进行正确的解密;
3. 程序运行时,要求输出每一轮使用的密钥,以及每一轮加密或解密之后的16进制表示的值;
4. 要求提供所设计系统的报告及完整的软件。
较高要求部分:
1.如果明文不止一个分组,程序能完成分组,然后加密;最后一个分组长度不足时要求完成填充;密钥长度不足时能进行填充,过长则自动截取前面部分。
2.密钥采用ASCII码,明文要求输入信息可以是文字(可以是汉字或英文,信息量要求不止一个加密分组长度),任意字符,或者是文本文档,或者普通文件。进行加密后,能够进行正确的解密;
3.程序代码有比较好的结构,模块划分合理,如用类进行封装,通过调用类的成员函数实现加密解密功能,函数的参数及返回值设置合理等;
4.界面友好,程序实现有新意。
2.2主要软件需求(运行环境)
本软件适用VC语言编写,编译成功后的EXE文件可以在装有windows系统的任何计算机上使用。
测试平台:Windows XP Professional
使用软件:Visual C++ 6.0孙颖莎乒乓球个人资料
2.3功能模块与系统结构
主要功能模块如下:
1.字节替换SubByte
A0,0 | A0,1 | A0,2 | A0,3 |
A1,0 | A1,1 | A1,2 | A1,3 |
A2,0 | A2,1 | A2,2 | A2,3 |
A3,0 | A3,1 | A3,2 | A3,3 |
B0,0 | B0,1 | B0,2 | B0,3 |
B1,0 | B1,1 | B1,2 | B1,3 |
B2,0 | B2,1 | B2,2 | B2,3 |
B3,0 | B3,1 | B3,2 | B3,3 |
2.行移位ShiftRow
3.列混合MixColumn
4.轮密钥加AddRoundKey
5.逆字节替换
通过逆S盒的映射变换得到
6.逆行移位InvShiftRow
与加密时的行移位区别在于移位方向相反。
7.逆列混淆
加密与解密系统流程图如下所示,
3 系统功能程序设计
3.1基本要求部分
3.1.1 字节替换
SubBytes()变换是一个基于S盒的非线性置换,它用于将输入或中间态的每一个字节通过一个简单的查表操作,将其映射为另一个字节。映射方法是把输入字节的高四位作为S盒的行值,低四位作为列值,然后取出S盒中对应的行和列的元素作为输出。亚当 g 瑟瓦尼
unsigned char subbytes(unsigned char state[4][4])
{printf("after subbyte:\n"); //取出中间态state映射到S盒中的值赋给中间态state
for(i=0;i<4;i++)
发布评论