已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录AES加密算法实现2一实验目的2二实验原理2三实验步骤2四实验结果6五实验心得8六源代码:9RSA加解密算法实现18一实验目的:18二实验要求:18三RSA函数主要代码18四运算结果显示:21五实验心得21AES加密算法实现一 实验目的1.深入理解AES加密/解密算法理论的基础上,设计一个AES加密/解密软件系统;2完成一个明文分组的加解密,明文和密钥是十六进制,长度都为128比特(32个16进制数),输入明文和密钥,输出密文,进行加密后,能够进行正确的解密;二 实验原理AES的区块长度固定为128 比特,密钥长度则可以是128,192或256比特;大多数AES计算是在一个特别的有限域完成的。AES加密过程是在一个44的字节矩阵上运作,这个矩阵又称为“状态矩阵”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:1.SubBytes 通过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。2.ShiftRows 将矩阵中的每个行进行循环式移位。3.MixColumns 列混淆。这个步骤使用线性转换来混合每列的四个字节。4.AddRoundKey 矩阵中的每一个字节都与该次回合轮密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。三 实验步骤(一)加密1.密钥生成void keyexpansion(unsigned char S_BOX16,unsigned char keys44)unsigned char Rcon11 = 0,1,2,4,8,16,32,64,128,27,54;unsigned char past4;register int i,j;/打开密钥文件if(fp=fopen(Key.txt,r)=NULL)printf(CAN NOT OPEN THE FILE!n);return ;printf(n请输入密钥!n);for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)fscanf(fp,%02x,&keysji);printf(%02x ,keysji);for(i = 4;i = 43;i +) /make the other 40 keys if(i % 4 = 0) /如果能被4整除,特殊处理for(j = 1;j = 4;j +) /把前一个密钥移位赋值给数组pastj - 1 = keysj % 4i -1;for(j = 0;j = 3;j +)if(j = 0)keysji = S_BOXpastj / 16pastj % 16 Rconi / 4 keysji - 4;elsekeysji = S_BOXpastj / 16pastj % 16 keysji - 4;elsefor(j = 0;j = 3;j +)keysji = keysji - 4 keysji - 1;2.字节变换void bytesub(unsigned char S_BOX16,unsigned char B4)register int i,j;for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)Bij = S_BOXBij / 16Bij % 16;3. 行移位void shiftrow(unsigned char B4)int i,temp;temp = B10;for(i = 0;i = 2;i +)B1i = B1i + 1;B13 = temp;for(i = 0;i =1;i -)B3i = B3i - 1;B30 = temp;4. 列混合运算unsigned char xtime (unsigned char input) / x乘法(02乘法) int temp;temp = input1;if(input & 0x80)temp = 0x1b;return temp; void mixcolumn(unsigned char input4) /列混合 int i, j;unsigned char output44;for(j = 0;j = 3;j+)for(i = 0;i = 3;i+)outputij = xtime(inputi%4j) /0x02乘法 ( input ( i + 1 ) % 4j xtime( input ( i + 1 ) % 4j ) ) /0x03乘法 input ( i + 2 ) % 4j /0x01乘法 input ( i + 3 ) % 4j; /0x01乘法for(i = 0;i = 3;i +)for(j = 0;j = 1;i -)B1i = B1i - 1;B10 = temp;for(i = 0;i = 1;i +)temp = B2i;B2i = B2i + 2;B2i + 2 = temp;temp = B30;for(i = 0;i = 2;i +)B3i = B3i + 1;B33 = temp;2.逆列混合运算void invmixcolum(unsigned char input4) int i, j;unsigned char output44;for(j=0; j 4; j+)for(i=0; i4; i+)outputij = (xtime(xtime(xtime(inputi % 4j) xtime(xtime(inputi % 4j)xtime(inputi % 4j) /0x0E乘法 (xtime(xtime(xtime(input ( i + 1 ) % 4j) xtime(input ( i + 1 ) % 4j) input ( i + 1 ) % 4j) /0x0B乘法 (xtime(xtime(xtime(input ( i + 2 ) % 4j) xtime(xtime(input ( i + 2 ) % 4j) input ( i + 2 ) % 4j) /0x0D乘法 (xtime(xtime(xtime(input ( i + 3 ) % 4j) input ( i + 3 ) % 4j); /0x09乘法for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)inputij = outputij;3.逆字节变换void invbytesub(unsigned char N_S_BOX16,unsigned char B4)register int i,j;for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)Bij = N_S_BOXBij / 16Bij % 16;四 实验结果我将明文设为13 43 67 69 88 d5 f6 8d 64 23 90 a2 e0 f5 b4 34,密钥设为23 43 45 78 28 af cd ab f7 d4 88 09 c3 4f 3c 57,运行结果如下:五 实验心得本程序是处理的AES分组大小和密钥长度都为128位,迭代轮数为10轮。由于我能力有限,下载的程序还有很多不足之处,比如不能自动运行产生16轮的轮密钥,只能说是完成了AES的基本功能,我也希望能将它的功能变得更强大,但多次修改后均没有成功。通过多次调试,对SubBytes,ShiftRows,MixColumns,AddRoundKey等加密过程,InvMixColumns,InvShiftRows,InvSubBytes等解密过程的编程运行过程有了清晰的认识,深入理解了AES的加密和解密过程,对算法、密码保密性和安全性有了新的认识,收获很多。六 源代码:#include #include FILE *fp;unsigned char xtime (unsigned char input);void keyexpansion(unsigned char S_BOX16,unsigned char keys44);void bytesub(unsigned char S_BOX16,unsigned char B4);void shiftrow(unsigned char B4);void mixcolumn(unsigned char input4);void invbytesub(unsigned char N_S_BOX16,unsigned char B4);void invshiftrow(unsigned char B4);void invmixcolum(unsigned char input4);int jiami(unsigned char S_BOX16);int jiemi(unsigned char S_BOX16,unsigned char N_S_BOX16);/密钥生成void keyexpansion(unsigned char S_BOX16,unsigned char keys44)unsigned char Rcon11 = 0,1,2,4,8,16,32,64,128,27,54;unsigned char past4;register int i,j;/打开密钥文件if(fp=fopen(Key.txt,r)=NULL)printf(CAN NOT OPEN THE FILE!n);return ;printf(n请输入密钥!n);for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)fscanf(fp,%02x,&keysji);printf(%02x ,keysji);for(i = 4;i = 43;i +) /make the other 40 keys if(i % 4 = 0) /如果能被4整除,特殊处理for(j = 1;j = 4;j +) /把前一个密钥移位赋值给数组pastj - 1 = keysj % 4i -1;for(j = 0;j = 3;j +)if(j = 0)keysji = S_BOXpastj / 16pastj % 16 Rconi / 4 keysji - 4;elsekeysji = S_BOXpastj / 16pastj % 16 keysji - 4;elsefor(j = 0;j = 3;j +)keysji = keysji - 4 keysji - 1;/列混合运算用到的乘2函数unsigned char xtime (unsigned char input) / x乘法(02乘法) int temp;temp = input1;if(input & 0x80)temp = 0x1b;return temp;/列混合运算void mixcolumn(unsigned char input4) /列混合 int i, j;unsigned char output44;for(j = 0;j = 3;j+)for(i = 0;i = 3;i+)outputij = xtime(inputi%4j) /0x02乘法 ( input ( i + 1 ) % 4j xtime( input ( i + 1 ) % 4j ) ) /0x03乘法 input ( i + 2 ) % 4j /0x01乘法 input ( i + 3 ) % 4j; /0x01乘法for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)inputij = outputij;/行移位void shiftrow(unsigned char B4)int i,temp;temp = B10;for(i = 0;i = 2;i +)B1i = B1i + 1;B13 = temp;for(i = 0;i =1;i -)B3i = B3i - 1;B30 = temp;/字节变换void bytesub(unsigned char S_BOX16,unsigned char B4)register int i,j;for(i = 0;i = 3;i +)for(j = 0;j = 1;i -)B1i = B1i - 1;B10 = temp;for(i = 0;i = 1;i +)temp = B2i;B2i = B2i + 2;B2i + 2 = temp;temp = B30;for(i = 0;i = 2;i +)B3i = B3i + 1;B33 = temp;/逆列混合运算void invmixcolum(unsigned char input4) int i, j;unsigned char output44;for(j=0; j 4; j+)for(i=0; i4; i+)outputij = (xtime(xtime(xtime(inputi % 4j) xtime(xtime(inputi % 4j)xtime(inputi % 4j) /0x0E乘法 (xtime(xtime(xtime(input ( i + 1 ) % 4j) xtime(input ( i + 1 ) % 4j) input ( i + 1 ) % 4j) /0x0B乘法 (xtime(xtime(xtime(input ( i + 2 ) % 4j) xtime(xtime(input ( i + 2 ) % 4j) input ( i + 2 ) % 4j) /0x0D乘法 (xtime(xtime(xtime(input ( i + 3 ) % 4j) input ( i + 3 ) % 4j); /0x09乘法for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)inputij = outputij;/逆字节变换void invbytesub(unsigned char N_S_BOX16,unsigned char B4)register int i,j;for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)Bij = N_S_BOXBij / 16Bij % 16;int jiami(unsigned char S_BOX16)unsigned char e,B44;unsigned char keys444;int i,j;if(fp=fopen(Plaintext.txt,r)=NULL)printf(cant open the Plaintext.txt!n);return 0;printf(请输入信息!n);for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)fscanf(fp,%02x,&e);Bji = e;printf(%02x ,e);getchar();fclose(fp);keyexpansion(S_BOX,keys);for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)Bij = keysij;int level;for(level = 1;level = 9;level +) /1到9轮循环bytesub(S_BOX,B);shiftrow(B);mixcolumn(B);for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)Bij = keysilevel * 4 + j;bytesub(S_BOX,B);/第10轮循环shiftrow(B);for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)Bij = keysi40 + j;if(fp=fopen(Ciphertext.txt,w)=NULL)printf(cant open the Plaintext.txt!n);return 0;printf(n加密后的信息为:n);for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)fprintf(fp,%02x ,Bji);printf(%02x ,Bji);putchar(n);fclose(fp);return 0;int jiemi(unsigned char S_BOX16,unsigned char N_S_BOX16)unsigned char B44;unsigned char keys444;unsigned char temp;int i,j;if(fp=fopen(Ciphertext.txt,r)=NULL)printf(cant open the Ciphertext.txt!n);return 0;printf(请输入信息!n);for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)fscanf(fp,%02x ,&temp);Bji = temp;printf(%02x ,temp);fclose(fp);keyexpansion(S_BOX,keys);for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)Bij = keysij + 40;int level;for(level = 1;level = 9;level +)invshiftrow(B);invbytesub(N_S_BOX,B);for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)Bij = keysi40 - level * 4 + j;invmixcolum(B);invshiftrow(B);invbytesub(N_S_BOX,B);for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)Bij = keysij;if(fp=fopen(jiemi_Plaintext.txt,w)=NULL)printf(cant open the jiemi_Plaintext.txt!n);return 0;printf(n解密的输出的信息为:n);for(i = 0;i = 3;i +)for(j = 0;j = 3;j +)fprintf(fp,%02x ,Bji);printf(%02x ,Bji);putchar(n);fclose(fp);return 0;int main()unsigned char S_BOX1616 = 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5,0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC,0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A,0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0,0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B,0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85,0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5,0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17,0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88,0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C,0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9,0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6,0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E,0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94,0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68,0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16;unsigned char N_S_BOX1616 = 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87,0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D,0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2,0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16,0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA,0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A,0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02,0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA,0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85,0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89,0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20,0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31,0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D,0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0,0xC8, 0xEB, 0xBB, 0x3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年秋季学期大学概率论与数理统计期末复习试卷(含答案)
- 2026及未来5年平洗槽项目可行性研究报告(市场调查与数据分析)
- 2026及未来5年常规中糯种子项目可行性研究报告(市场调查与数据分析)
- 分销渠道管理合同
- 5-Pyrimidin-5-yl-isophthalic-acid-生命科学试剂-MCE
- sat数学试题及答案
- 邹平数学试题及答案
- 2026年航空行业服务模式研究报告:一次性航班与长期服务对比分析
- 2026年在线旅游行业热点借势案例分析报告
- 2026年电子商务行业合同规范与加盟报告
- (一模)嘉兴市2026-2027学年第一学期高三教学质量检测语文试卷(含答案)
- 2027年湖北交通投资集团有限公司秋季校园招聘131人笔试备考题库及答案解析
- 2026山东青岛水务集团有限公司招聘笔试历年参考题库附带答案详解
- 【应用方案】2026智慧农业农业机器人智能感知与精准作业一体化设计方案
- GB/T 9239.1-2026机械振动转子平衡第1部分:引言
- T∕CCEAS008-2026 建设工程造价咨询成果文件质量标准
- 2018 机械通风冷却塔 第1部分:中小型开式冷却塔
- 2026年河南省公务员面试考题及答案解析
- DB21-T 4262-2025 日光温室草莓低温短日促早熟技术规程
- 梅尼埃病前庭功能检测
- 凉山2025年四川凉山州雷波重点国有林保护局招聘27人笔试历年参考题库附带答案详解
评论
0/150
提交评论