AES 文件加密解密 课程设计报告
《信息安全、DES和AES加密解密》课程设计

信息安全概论院(系):专业班级:姓名:学号:日期:地点:指导教师:成绩:一、课程设计目标1.通过信息安全课程设计,能够增强我们对信息安全的认识,更加牢固的掌握信息安全概论相关知识。
2.综合运用学习到的理论知识,提高实践能力。
3.通过小组讨论形式对任务进行分解,提出实现方案,制定计划,小组成员分工协作,共同完成课程设计题目,培养团队合作能力。
4.运用熟悉的程序语言编写程序,增强对程序语言的运用。
5.课程设计期间,通过对问题的分析查找资料,培养资料查询以及运用现代信息技术获取相关信息并进行归纳总结的基本能力。
6.与同学讨论,互相学习,提升个人学习能力。
二、课程设计内容1课程设计的内容1.1确定课程设计方向:经过小组成员的商讨,确定了使用c#语言,编写一个对文件进行加密加密的小程序,运用DES算法,实现对文件的加密解密后,再添加一些小的功能,用AES算法,实现对字符串的加密解密。
1.2 查阅资料:通过查找文件加解密的资料以及查阅了相关的加密解密算法,学习了对文件加密解密的基本思路,与实现方法。
1.3界面设程序计:设计一个整体界面,有三个按钮,其中两个分别实现对应文件的加密解密和字符串的加密解密,还有一个退出程序功能按钮。
1.4程序设计:有了思路和方法,接着就借助c#语言分别实现对文件的加密解密,以及对字符串的加密解密小程序。
1.5 后期调试:程序实现后,对其进行调试,发现不合适的地方及时纠正。
1.6完成课程设计:写课程设计报告,完成课程设计。
2原理介绍2.1 DES加密原理DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。
这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。
使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。
DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。
aes程序课程设计

aes程序课程设计一、课程目标知识目标:1. 让学生掌握AES算法的基本原理,理解其加密和解密过程。
2. 使学生了解AES算法的密钥生成、扩展和管理的相关知识。
3. 帮助学生掌握AES算法在不同模式(如ECB、CBC等)下的应用和特点。
技能目标:1. 培养学生运用编程语言(如Python、C等)实现AES算法的能力。
2. 让学生学会分析AES算法的安全性,并能针对实际场景选择合适的加密模式。
3. 提高学生解决加密与解密过程中遇到的实际问题的能力。
情感态度价值观目标:1. 培养学生对信息安全领域的兴趣,激发他们主动探索加密技术的热情。
2. 增强学生的团队合作意识,使他们能够在项目实践中相互协作、共同进步。
3. 引导学生树立正确的网络安全观念,认识到保护数据安全的重要性。
课程性质:本课程为计算机科学和信息安全的实践性课程,强调理论与实践相结合,注重培养学生的动手能力和实际应用能力。
学生特点:学生具备一定的编程基础和信息安全知识,对加密技术有一定了解,但可能对AES算法的具体实现和应用不够熟悉。
教学要求:结合学生特点和课程性质,采用案例教学、项目驱动等方法,引导学生通过实践掌握AES算法的相关知识,提高他们在实际场景中解决问题的能力。
同时,注重培养学生的团队合作精神和网络安全意识。
通过本课程的学习,使学生能够达到上述课程目标,为后续相关课程和实践打下坚实基础。
二、教学内容1. AES算法基本原理:包括AES算法的历史背景、设计目的和基本结构,重点讲解AES算法的轮函数、密钥扩展等核心概念。
相关教材章节:第3章“对称加密算法”中的第2节“AES算法”。
2. AES算法编程实现:通过讲解和示范,让学生学会使用编程语言实现AES算法,涵盖ECB、CBC等模式。
相关教材章节:第4章“AES算法编程实践”中的第1节“AES算法的编程实现”。
3. AES算法安全性分析:分析AES算法的安全性,探讨可能的攻击方法,如暴力破解、字典攻击等,并介绍防范措施。
AES加密算法实验报告

实验报告学号:姓名:专业:班级:第 10 周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:};#include""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; j<200; j++){if (a[j] == 0){break;}}for (; i<16; 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; i<16; i++){b[i] = sBox[(int)p[i]];}}void plaintext::inSubBytes(unsigned char p[16])//逆字节变换函数{unsigned char b[16];for (int i = 0; i<16; i++){b[i] = insBox[(int)p[i]];}}void plaintext::ShiftRows(unsigned char e[])//行移位变换函数{unsigned char t[4];for (int i = 1; i<4; i++){for (int x = 0; x<4; x++)t[x] = e[x + i * 4];for (int y = 0; y<4; y++)e[(y + 4 - i) % 4 + i * 4] = t[y];}}void plaintext::inShiftRows(unsigned char e[])//逆行移位变换函数{unsigned char t[4];for (int i = 1; i<4; i++){for (int x = 0; x<4; x++)t[x] = e[x + i * 4];for (int y = 0; y<4; y++)e[(y + i) % 4 + i * 4] = t[y];}}void plaintext::MatrixToByte(unsigned char e[])//列混合变换函数{unsigned char t[4];int r, c;for (c = 0; c< 4; c++){for (r = 0; r<4; r++){t[r] = e[r * 4 + c];}for (r = 0; r<4; r++){e[r * 4 + c] = FFmul(0x02, t[r])^ FFmul(0x03, t[(r + 1) % 4])^ FFmul(0x01, t[(r + 2) % 4])^ FFmul(0x01, t[(r + 3) % 4]);}}}void plaintext::inMatrixToByte(unsigned char e[])//逆列混合变换函数{unsigned char t[4];int r, c;for (c = 0; c< 4; c++){for (r = 0; r<4; r++){t[r] = e[r * 4 + c];}for (r = 0; r<4; r++){e[r * 4 + c] = FFmul(0x0e, t[r])^ FFmul(0x0b, t[(r + 1) % 4])^ FFmul(0x0d, t[(r + 2) % 4])^ FFmul(0x09, t[(r + 3) % 4]);}}}unsigned char plaintext::FFmul(unsigned char a, unsigned char b){unsigned char bw[4];unsigned char res = 0;int i;bw[0] = b;for (i = 1; i<4; i++){bw[i] = bw[i - 1] << 1;if (bw[i - 1] & 0x80){bw[i] ^= 0x1b;}}for (i = 0; i<4; i++){if ((a >> i) & 0x01){res ^= bw[i];}}return res;}void plaintext::KeyAdding(unsigned char state[16], unsigned char k[][4])//轮密钥加{int r, c;for (c = 0; c<4; c++){for (r = 0; r<4; r++){state[r + c * 4] ^= k[r][c];}}}void plaintext::KeyExpansion(unsigned char* key, unsigned char w[][4][4])//密钥扩展{int i, j, r, c;unsigned char rc[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36 };for (r = 0; r<4; r++){for (c = 0; c<4; c++){w[0][r][c] = key[r + c * 4];}}for (i = 1; i <= 10; i++){for (j = 0; j<4; j++){unsigned char t[4];for (r = 0; r<4; r++){t[r] = j ? w[i][r][j - 1] : w[i - 1][r][3];}if (j == 0){unsigned char temp = t[0];for (r = 0; r<3; r++){t[r] = sBox[t[(r + 1) % 4]];}t[3] = sBox[temp];t[0] ^= rc[i - 1];}for (r = 0; r<4; r++){w[i][r][j] = w[i - 1][r][j] ^ t[r];}}}}plaintext::~plaintext(){}#include<iostream>#include<>#include<>//使用文件选取功能#include""using namespace std;unsigned char w[11][4][4] = { 0 };int len = 0;//图片每行需要加密的长度void Cipher();//加密图片void inCipher();//解密图片void Cipher(unsigned char a[]){unsigned char b[16];for (int i = 0; i < (len / 16); i++){for (int j = 0; j<16; j++)b[j] = a[j + i * 16];plaintext::KeyAdding(b, w[0]);for (int n = 1; n <= 10; n++){plaintext::SubBytes(b);plaintext::ShiftRows(b);if (n != 10)plaintext::MatrixToByte(b);plaintext::KeyAdding(b, w[n]);}for (int m = 0; m<16; m++)a[m + i * 16] = b[m];}}void inCipher(unsigned char a[]){unsigned char b[16];for (int i = 0; i < (len / 16) ; i++){for (int j = 0; j<16; j++){b[j] = a[j + i * 16];}plaintext::KeyAdding(b, w[10]);for (int n = 9; n >= 0; n--){plaintext::inShiftRows(b);plaintext::inSubBytes(b);plaintext::KeyAdding(b, w[n]);if (n)plaintext::inMatrixToByte(b);}for (int m = 0; m<16; m++)a[m + i * 16] = b[m];}}bool ImageCopy(const CImage &srcImage, CImage &destImage) {int i, j;//循环变量if ())return FALSE;//源图像参数BYTE* srcPtr = (BYTE*)();int srcBitsCount = ();int srcWidth = ();int srcHeight = ();int srcPitch = ();//销毁原有图像if (!()){();}//创建新图像if (srcBitsCount == 32) //支持alpha通道{(srcWidth, srcHeight, srcBitsCount, 1);}else{(srcWidth, srcHeight, srcBitsCount, 0);}BYTE *destPtr = (BYTE*)();int destPitch = ();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 &destImage){int i, j;//循环变量if ())return FALSE;//源图像参数BYTE* srcPtr = (BYTE*)();int srcBitsCount = ();int srcWidth = ();int srcHeight = ();int srcPitch = ();//销毁原有图像if (!()){();}//创建新图像if (srcBitsCount == 32) //支持alpha通道{(srcWidth, srcHeight, srcBitsCount, 1);}else{(srcWidth, srcHeight, srcBitsCount, 0);}BYTE *destPtr = (BYTE*)();int destPitch = ();len = abs(srcPitch);for (int i = 0; i<srcHeight; i++)inCipher(srcPtr + i*srcPitch);//复制图像数据for (i = 0; i<srcHeight; i++){memcpy(destPtr + i*destPitch, srcPtr + i*srcPitch, abs(srcPitch));}return TRUE;}int main(){unsigned char key[16] = {//固定密钥0x77, 0x59, 0xc5, 0xa4,0x55, 0x90, 0xa4, 0xa3,0xb2, 0xcc, 0x01, 0xa9,0xcb, 0xac, 0x77, 0x23 };plaintext::KeyExpansion(key, w);TCHAR szBuffer[MAX_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_ALLOWMULTISELECTBOOL bSel = GetOpenFileName(&ofn);CImage image, image2, image3;//读取图片(szBuffer);。
AES加密解密实验报告

AES加密解密实验报告实验目的:了解和学习AES加密算法的原理和实现过程,掌握AES加密解密的方法。
实验原理:AES(Advanced Encryption Standard)高级加密标准,是一种对称加密算法,使用相同的密钥进行加密和解密。
AES加密算法使用数学运算和逻辑操作混合的方式,通过多轮迭代和替代、逆替代、置换等步骤,对数据进行加密和解密操作。
实验材料和方法:材料:计算机、Python编程环境。
方法:通过Python编程环境调用AES库函数,进行AES加密解密实验。
实验步骤:1. 导入AES库函数:在Python编程环境中,导入AES的库函数。
```pythonfrom Crypto.Cipher import AESfrom Crypto.Random import get_random_bytes```2. 生成随机密钥:使用get_random_bytes(函数生成一个长度为16字节的随机密钥。
```pythonkey = get_random_bytes(16)```3. 实例化AES加密对象:使用AES.new(函数,传入随机密钥和加密模式“AES.MODE_ECB”创建AES加密对象。
```pythoncipher = AES.new(key, AES.MODE_ECB)```4. 加密数据:使用encrypt(函数,传入要加密的数据进行加密操作。
```pythonmessage = "This is a secret message.".encodeciphertext = cipher.encrypt(message)```5. 解密数据:使用decrypt(函数,传入密文进行解密操作。
```pythonplaintext = cipher.decrypt(ciphertext)```6. 打印加密和解密结果:使用print(函数,打印加密前后和解密后的数据。
加密解密实验报告

竭诚为您提供优质文档/双击可除加密解密实验报告篇一:Aes加密解密实验报告信息安全工程课程实验报告Aes加密解密的实现课程名称:信息安全工程学生姓名:学生学号:专业班级:任课教师:黄小菲3112041006系统工程2038班蔡忠闽20XX年11月22日目录1.背景................................................. ................................................... . (1)1.1Rijndael密码的设计标准:............................................... .................................11.2设计思想................................................. ................................................... .......12.系统设计................................................. ................................................... . (2)2.1系统主要目标................................................. ................................................... ..22.2功能模块与系统结构................................................. . (2)2.2.1字节替换subbyte............................................ ...........................................22.2.2行移位shiftRow........................................... ..............................................22.2.3列混合mixcolumn.......................................... ..........................................32.2.4轮密钥加AddRoundKey........................................ .....................................42.2.5逆字节替换................................................. ..............................................42.2. 6逆行移位InvshiftRow........................................ .. (4)2.2.7逆列混淆................................................. .. (4)3加密模式................................................. ................................................... (5)3.1电子密码本ecb模式................................................. ........................................53.2加密块链模式cbc模......................................64系统功能程序设计................................................. ................................................... . (8)4.1基本加密部分................................................. ................................................... ..84.1.1字节替换................................................. ...................................................84.1.2行移位................................................. ................................................... ...84.1.3列混合................................................. ................................................... (9)4.1.4轮密钥加.................................................94.1.5密钥扩展................................................. . (10)4.1.6逆字节替换................................................. ..............................................114.1 .7逆行移位................................................. .. (1)14.1.8逆列混合................................................. . (12)4.1.9加密................................................. ................................................... .....124.1.10解密................................................. ................................................... (13)5实验结果................................................. (14)5.1需要加密文件................................................. .. (1)45.2实验加密解密结果................................................. ...........................................156参考资料................................................. ................................................... . (16)1.背景Aes,密码学中的高级加密标准(Advancedencryptionstandard,Aes),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
AES课程设计报告--AES加密解密的实现

课程设计报告AES加密解密的实现课程名称:密码算法程序设计学生姓名:学生学号:专业班级:任课教师:2011年6 月24 日附件:课程设计成绩评价表目录1.背景与意义 (1)2. 系统设计 (1)系统主要目标 (1)主要软件需求(运行环境) (2)功能模块与系统结构 (2)3 系统功能程序设计 (3)基本要求部分 (3)3.1.1 字节替换 (4)行移位 (5)列混合 (6)密钥加 (8)密钥扩展 (8)获取RoundKey (10)逆字节替换 (11)逆行移位 (11)逆列混合 (12)加密 (13)解密 (15)4. 测试报告 (17)5.结论 (19)参考文献 (19)1.背景与意义由于AES应用了,感觉这算法的分组为固定长度的128bit,而密钥却有三种,分别为128,192,256bit,对应三种不同轮数分别为10轮,12轮,14轮。
这就加大了算法实现的难度,加上每轮的4种变换,更加体现了算法的复杂性,所以我采用的AES来实现。
不仅加深了我对密码算法本身的认识,更加巩固了我本来不是很熟悉的C语言。
AES算法采用的不可约多项式是p(x)=(84310),共256个多项余式构成了一个有限域,在这有限域上要用到字节运算和字运算。
随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准,即AES[1]。
AES即高级加密标准,作为传统堆成加密算法标准DES的替代者,有美国国家标准与技术研究所于1997年提出征集该算法的公告.1999年3月22日,NIST从15个候选算法中公布了5个候选算法进入第二轮悬着:MARS、RC6、Rijindael、SERPENT和Twofish。
经过三轮的筛选,2000年10月2日,以安全性(稳定的数学基础、没有算法弱点、算法抗密码分析的强度、算法输出的随机性)、性能(必须能再多种平台上一较快的速度实现)、大小(不能占用大量的存储空间和内存)、实现特性(灵活性、硬件和软件适应性、算法的简单性等)为标准而最终选定了两个比利时研究者Vincent Rijmen和Joan Daemen 发明的Rijndael算法,并于2001年正式发布了AES标准。
密码学实验报告AESRSA

华北电力大学实验报告||实验名称现代密码学课程设计课程名称现代密码学||专业班级:学生姓名:学号:成绩:指导教师:实验日期:[综合实验一] AES-128加密算法实现 一、实验目的及要求(1)用C++实现;(2)具有16字节的加密演示;(3)完成4种工作模式下的文件加密与解密:ECB, CBC, CFB,OFB.二、所用仪器、设备计算机、Visual C++软件。
三. 实验原理3.1、设计综述AES 中的操作均是以字节作为基础的,用到的变量也都是以字节为基础。
State 可以用4×4的矩阵表示。
AES 算法结构对加密和解密的操作,算法由轮密钥开始,并用Nr 表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表2所示)。
AES 算法的主循环State 矩阵执行1 r N 轮迭代运算,每轮都包括所有 4个阶段的代换,分别是在规范中被称为 SubBytes(字节替换)、ShiftRows(行位移变换)、MixColumns(列混合变换) 和AddRoundKey ,(由于外部输入的加密密钥K 长度有限,所以在算法中要用一个密钥扩展程序(Keyexpansion)把外部密钥 K 扩展成更长的比特串,以生成各轮的加密和解密密钥。
最后执行只包括 3个阶段 (省略 MixColumns 变换)的最后一轮运算。
表2 AES 参数比特。
3.2、字节代替(SubBytes )AES 定义了一个S 盒,State 中每个字节按照如下方式映射为一个新的字节:把该字节的高4位作为行值,低4位作为列值,然后取出S 盒中对应行和列的元素作为输出。
例如,十六进制数{84}。
对应S 盒的行是8列是4,S 盒中该位置对应的值是{5F}。
S 盒是一个由16x16字节组成的矩阵,包含了8位值所能表达的256种可能的变换。
S 盒按照以下方式构造:(1) 逐行按照升序排列的字节值初始化S 盒。
第一行是{00},{01},{02},…,{OF};第二行是{10},{l1},…,{1F}等。
AES加密解密的实现

AES加密解密的实现成都信息⼯程学院课程设计报告AES加密解密的实现课程名称:应⽤密码算法程序设计学⽣姓名:兰符娥学⽣学号:2008122050专业班级:信息安全08级2班任课教师:2011年9 ⽉24 ⽇附件:课程设计成绩评价表⽬录1.背景与意义 (1)2. 系统设计 (1)2.1系统主要⽬标 (1)2.2主要软件需求(运⾏环境) (1)2.3功能模块与系统结构 (2)3 系统功能程序设计 (3)3.1基本要求部分 (3)3.1.1 字节替换 (3)3.1.2⾏移位 (4)3.1.3列混合 (4)3.1.4密钥加 (6)3.1.5密钥扩展 (6)3.1.6获取RoundKey (8)3.1.7逆字节替换 (8)3.1.8逆⾏移位 (9)3.1.9逆列混合 (9)3.1.10加密 (11)3.1.11解密 (12)3.2较⾼要求部分 (13)3.2.1 明⽂分组实现 (13)3.2.2 明⽂最后分组的填充 (13)3.2.3 对⼤⽂件的加密处理 (13)3.2.4 对⼤⽂件的解密处理 (16)3.3程序界⾯预览 (19)4. 测试报告 (19)5.结论 (19)参考⽂献 (20)1.背景与意义AES(The Advanced Encryption Standard)是美国国家标准与技术研究所⽤于加密电⼦数据的规范。
它被预期能成为⼈们公认的加密包括⾦融、电信和政府数字信息的⽅法。
AES 是⼀个新的可以⽤于保护电⼦数据的加密算法。
明确地说,AES 是⼀个迭代的、对称密钥分组的密码,它可以使⽤128、192 和256 位密钥,并且⽤128 位(16字节)分组加密和解密数据。
与公共密钥密码使⽤密钥对不同,对称密钥密码使⽤相同的密钥加密和解密数据。
通过分组密码返回的加密数据的位数与输⼊数据相同。
迭代加密使⽤⼀个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输⼊数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第
页, 共
页
摘要
随着现代密码分析水平、芯片处理能力和计算技术的不断进步,高级加密标 准AES的Rijndael算法将在各行业各部门获得了广泛的应用,成为虚拟专用网、 SONET、远程访问服务器、高速ATM以太网路由器、移动通信、卫星通信、电子金 融业务等的加密算法, 并逐渐取代DES在IPSec、 SSL和 ATM中的加密功能。 目前, IEEE 802.11草案已经定义了AES加密的两种不同运行模式,成功解决了无限局域 网标准中的诸多安全问题。在这种情形下,AES算法的安全性及其快速实现问题 显得格外突出。文章阐述了Rijndael算法的设计特色,详细介绍了AES具体的加 密解密算法函数。此外,AES算法具有抵抗强力攻击的能力,抵抗差分分析和线 性密码分析的能力,抵抗渗透攻击和代数计算攻击的能力,抵抗XSL攻击和弱密 钥分析的能力。从这几个方面可以说明AES具有良好的安全性能。另外,我们根 据算法的安全性、代价以及算法与实现特性的原则实现了AES简单常用的加密解 密算法。
设计工作计划 1. 本次课程设计的时间是 2 周,工作计划如下: 2. 任务书下达,理解选题,明确软件功能,分析和设计:2 天; 3. 分析和设计报告的撰写:1 天 4. 实现部分设计及文档编写;1 天; 5. 编码及调试:4 天; 6. 报告完善及打印:1 天; 7. 成果提交和验收:1 天。
主要参考资料 1、陈鲁生、沈世镒《现代密码学》 (2) 北京:科学出版社,2008 年 2、Michael Welschenbach 编著,赵振江,连国卿等译,《编码密码学——加 密方法的 C 与 C++实现》,电子工业出版社,2003 年 6 月; 3、/
关键字 :
AES
Rijndael算法
第
页, 共
页
AES 加密解密的实现
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 在软体及硬件上都能快速地加 解密,相对来说较易于实作,且只需要很少的记忆体。作为一个新的加密标准, 目前正被部署应用到更广大的范围。
教研室签字:
年
月
日
学院签字:
年
月
ห้องสมุดไป่ตู้
日
目录 目录 .......................................................................................................................................................................... 1 摘要 .......................................................................................................................................................................... 2 AES 加密解密的实现 ...................................................................................................................................... 3 1. 背景 ............................................................................................................................................................... 3 2. 系统设计..................................................................................................................................................... 3
指导教师姓 高雁飞 教研室 名 课程设计题 文件加密/解密系统 目 设计目的、任务和要求
信息与计算科学 人数 1 学时 2周
设计目的: 本课程设计力求为学生提供一个理论联系实际的机会。通过实践,建立密码学 理论的整体思想,锻炼编写、调试程序的能力,学习文档编写规范,培养独立 学习、吸取他人经验、探索前沿知识的习惯,树立团队协作精神。同时,课程 设计可以充分弥补课堂教学及普通实验中知识深度与广度有限的缺陷, 更好地 帮助学生从全局角度把握课程体系。 设计任务: (1)在深入理解 DES 或 AES 加密/解密算法理论的基础上,设计一个 DES 或 AES 加密/解密软件系统; (2)加/解密过程可用分组密码运行模式中的任一种模式; (3)完成一个明文分组的加解密,明文和密钥可以是二进制,十六进制或者 ASCII 码。进行加密后,能够进行正确的解密; (4)提供良好的用户界面; (5)要求提供所设计系统的报告及完整的软件。 设计的方法和步骤 第一步:进行系统设计; 第二步:代码编码; 第三步:对实现部分的软件功能或者模块进行测试 第四步:提交完整可执行软件,准备答辩; 第五步:答辩,演示软件,教师根据实际情况提出测试用例,学生作最后的修 改和完善,教师对软件运行部分进行评分; 第六步:完成课程设计报告并提交。
2.1 系统主要目标...................................................................................................................................... 3 2.2 系统运行环境...................................................................................................................................... 3 2.3 功能模块与系统结构...................................................................................................................... 4 3.系统功能程序设计 .................................................................................................................................. 6 3.1 字节替换 ................................................................................................................................................. 6 3.2 行移位...................................................................................................................................................... 7 3.3 列混合....................................................................................................................................................... 7 3.4 混合列变换中的乘法运算 ............................................................................................................ 7 3.5 密钥扩展 ................................................................................................................................................. 9 3.6 逆字节替换 ......................................................................................................................................... 11 3.7 逆行移位 .............................................................................................................................................. 11 3.8 加密 ......................................................................................................................................................... 11 3.9 解密 ......................................................................................................................................................... 12 软件测试 ............................................................................................................................................................ 14 小结 ....................................................................................................................................................................... 17 参考文献 ............................................................................................................................................................ 17 附录:.................................................................................................................................................................. 18