版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、信息安全工程课程实验报告编程实现aes算法的加密解密过程课程名称:信息安全工程学生姓名:学生学号:专业班级:任课教师:蔡忠闽 目录1 背景与意义32 实验要求33.系统设计43.1系统主要目标43.2主要软件需求(运行环境)44 aes算法加密和解密原理分析44.1加密过程基本变换64.2解密过程基本变换64.3密钥扩展算法75.系统功能程序设计76. 测试报告176.1 加密176.2 解密197 实验总结211 背景与意义科技的发展使计算机深入到了我们生活的的方方面面,计算机在带来方便和提高了工作效率的同时却也带来了各种各样的新问题,其中信息安全问题最为突出,随着计算机信息安全要求的不断提
2、高, 计算机保密系统已变得越来越重要,所以我们需要一种较为可靠的加密算法来保护我们信息的安全。由于des已经无法满足高保密性的要求,美国于1997年1月开始征集新一代数据加密标准(即高级数据加密标准,advanced encryption standard,aes)。2000年10月2日,正式宣布选择比利时密码学家所开发的rijndael算法成为aes的最终算法。aes(the advanced encryption standard)是美国国家标准与技术研究所用于加密电子数据的规范。它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。aes 是一个新的可以用于保护电子数据的加密算
3、法。明确地说,aes 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入 数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。该算法为比利时密码学家joan daemen和vincent rijmen所设计,结合两位作者的名字,以rijndael之命名之,投稿高级加密标准的甄选流程。(rijdael的发音近于 rhine doll。)aes在软体及硬件上都能快速地加解密,相对来说较易于实作
4、,且只需要很少的记忆体。作为一个新的加密标准,目前正被部署应用到更广大的范围.2 实验要求(1)一人一组 (2)aes算法加密和解密原理分析 (3)提交完整的源程序(使用网络上的现成程序一定要注明出处) (4)提交程序的设计,说明文档 (5)用ecb和分组链模式cbc,对给定内容进行加密和解密,提交解密结果,并提交实验心得,着重阐述对实验的理解(6)程序调试成功后,处理以下内容:a、aes 加密明文:各自的姓名+邮箱秘钥:各自的手机号b、aes解密密文:邮箱附件给出秘钥:(给出秘钥为ascii码形式,请将ascii码转为二进制,不满128位在其后补零):130729810633.系统设计3.1
5、系统主要目标1在深入理解aes加密/解密算法理论的基础上,设计一个aes加密/解密软件系统;2完成一个明文分组的加解密,明文和密钥是十六进制,输入明文和密钥,输出密文,进行加密后,能够进行正确的解密;3. 按要求提供所设计系统的报告及完整的软件。3.2主要软件需求(运行环境)本软件适用vc语言编写,编译成功后的exe文件可以在装有windows系统的任何计算机上使用。测试平台:windows 8使用软件:visual studio 2012/c+4 aes算法加密和解密原理分析aes是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥长度,并且用128位分组长度加密和解密数
6、据2。该算法输入分组、输出分组、状态长度均为128比特。对于aes算法的运算是在一个称为状态的二维字节数组上进行。一个状态由四行组成,每一行包括nb个字节,nb等于分组长度除以32,aes分组长度为128位,因此,nb=4,该值反应了状态中32-bit字的个数(列数);密钥长度128、192和256位可分别表示为nk=4、6或8,反应了密钥中32-bit字的个数(列数)。而aes算法的轮数nr仅依赖于密钥长度nk,轮数和密钥长度的关系可以表示为:nr=6+nk。密钥长度分组长度轮数的关系如表1所示。表1 key-block-round关系密钥长度(nk words)分组长度(nb words)
7、轮数(nr)441064128414对于加密和解密变换,aes算法使用的轮函数由4个不同的以字节为基本单位的变换复合而成,该过程由四个不同的阶段组成3:(1)s盒变换,用一个s盒完成分组中的按字节代替;(2)行移位变换,一个简单的置换;(3)列混淆变换,一个利用在域gf(28) 上的算术性的代替;(4)轮密钥加变换,一个利用当前分组和扩展密钥的一个部分进行按位异或。aes对数据的加密过程是通过把输入的明文和密钥由轮函数经nr轮迭代来实现的,结尾轮与前nr-1轮不同。前nr-1轮依次进行s盒变换、行移位变换、列混淆变换和轮密钥加变换;结尾轮与前nr-1轮相比去掉了列混淆变换。而解密过程与加密过程
8、相反,通过把输入的密文和密钥由轮函数经nr轮迭代来实现的,结尾轮与前nr-1轮不同。前nr-1轮依次进行逆行移位变换、逆s盒变换、轮密钥加变换和逆列混淆变换;结尾轮与前nr-1轮相比去掉了逆列混淆变换。aes算法的加密解密过程如图1所示:图1 aes加密解密流程4.1加密过程基本变换(1) s盒变换s盒变换是一个基于s盒的非线性置换,它用于输入或中间态的每一个字节通过一个简单的查表操作,将其映射为另一个字节。映射方法是:把输入字节的高4位作为s盒的行值,低4位作为列值,然后取出s盒中对应行和列的元素作为输出。例如,输入为“89”(十六进制)的值所对应的s盒的行值为“8”,列值为“9”,s盒中相
9、应位置的值为“a7”,就说明“89”被映射为“87”。 (2) 列混淆变换列混淆变换实现逐列混淆,其方法是: 其中,内的数表示是字节。用矩阵表示为(3) 行移位变换行移位变换完成基于行的循环移位操作,即行移位变换的作用在中间态的行上,第0行不动,第1行循环左移1个字节,第2行循环左移2个字节,第3行循环左移3个字节。(4) 轮密钥加变换轮密钥加变换用于将输入或中间态s的每一列与一个密钥字wi进行按位异或,其中, 由原始密钥通过密钥扩展算法产生。4.2解密过程基本变换解密过程是加密的逆过程,s盒变换、行移位变换、列混淆变换都要进行求逆变换,即逆s盒变换、逆行移位变换、逆列混淆变换。而轮密钥加变换
10、与加密过程相同。(1) 逆s盒变换与s盒变换类似,逆s盒变换是基于逆s盒实现的。(2) 逆行移位变换与行移位变换相反,逆行移位变换将态state的后三行按相反的方向进行移位操作,即第0行保持不变,第1行向右移1个字节,第2行向右移2个字节,第3行向右移3个字节。(3) 逆列混淆变换逆列混淆变换的处理方法与列混淆变换类似,每一列都通过与一个固定的多项相乘进行变换。写为矩阵乘法的形式,逆列混淆变换按以下方式对列进行变换:4.3密钥扩展算法aes加密解密过程中,每一轮都需要一个与输入分组具有相同长度的扩展密钥wi的参与。由于外部输入的加密密钥长度有限,所以在算法中要用一个密钥扩展程序把外部密钥扩展成
11、更长的比特串,以生成各轮的加密和解密密钥。通过生成器产生nr+1轮轮密钥,每个轮密钥由nb个字组成,共有nb(nr+1)个字wi,i=0,1,nb(nr+1)-1。5.系统功能程序设计(代码参考自csdn论坛)#include stdafx.h#include (aes加解密).h#include#include#includebyte in4nb; /in数组用于读入需要或解密的数据byte key4nk; /key数组用于读入初始密钥 byte wnr+1nk4; /w数组用于保存所有扩展后的密钥 /s盒byte s_box256=0x63,0x7c,0x77,0x7b,0xf2,0x6b
12、,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
13、,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
14、,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
15、,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
16、,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16;/逆s盒byte invs_box256 =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,0x
17、fa,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,0x
18、e4,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,0x
19、29,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,0x
20、e0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0,0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61,0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26,0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d;/表alog256是生成元表示到多项式的映射表。使用的生成元为x+1byte alog256 =0x01,0x03,0x05,0x0f,0x11,0x33,0x55,0xff,0x1a,0x2e,0x72,0x96,0xa1,0xf8,0x13,0x35,0x5f,0xe1,0x38,0x48
21、,0xd8,0x73,0x95,0xa4,0xf7,0x02,0x06,0x0a,0x1e,0x22,0x66,0xaa,0xe5,0x34,0x5c,0xe4,0x37,0x59,0xeb,0x26,0x6a,0xbe,0xd9,0x70,0x90,0xab,0xe6,0x31,0x53,0xf5,0x04,0x0c,0x14,0x3c,0x44,0xcc,0x4f,0xd1,0x68,0xb8,0xd3,0x6e,0xb2,0xcd,0x4c,0xd4,0x67,0xa9,0xe0,0x3b,0x4d,0xd7,0x62,0xa6,0xf1,0x08,0x18,0x28,0x78,0x88
22、,0x83,0x9e,0xb9,0xd0,0x6b,0xbd,0xdc,0x7f,0x81,0x98,0xb3,0xce,0x49,0xdb,0x76,0x9a,0xb5,0xc4,0x57,0xf9,0x10,0x30,0x50,0xf0,0x0b,0x1d,0x27,0x69,0xbb,0xd6,0x61,0xa3,0xfe,0x19,0x2b,0x7d,0x87,0x92,0xad,0xec,0x2f,0x71,0x93,0xae,0xe9,0x20,0x60,0xa0,0xfb,0x16,0x3a,0x4e,0xd2,0x6d,0xb7,0xc2,0x5d,0xe7,0x32,0x56
23、,0xfa,0x15,0x3f,0x41,0xc3,0x5e,0xe2,0x3d,0x47,0xc9,0x40,0xc0,0x5b,0xed,0x2c,0x74,0x9c,0xbf,0xda,0x75,0x9f,0xba,0xd5,0x64,0xac,0xef,0x2a,0x7e,0x82,0x9d,0xbc,0xdf,0x7a,0x8e,0x89,0x80,0x9b,0xb6,0xc1,0x58,0xe8,0x23,0x65,0xaf,0xea,0x25,0x6f,0xb1,0xc8,0x43,0xc5,0x54,0xfc,0x1f,0x21,0x63,0xa5,0xf4,0x07,0x09
24、,0x1b,0x2d,0x77,0x99,0xb0,0xcb,0x46,0xca,0x45,0xcf,0x4a,0xde,0x79,0x8b,0x86,0x91,0xa8,0xe3,0x3e,0x42,0xc6,0x51,0xf3,0x0e,0x12,0x36,0x5a,0xee,0x29,0x7b,0x8d,0x8c,0x8f,0x8a,0x85,0x94,0xa7,0xf2,0x0d,0x17,0x39,0x4b,0xdd,0x7c,0x84,0x97,0xa2,0xfd,0x1c,0x24,0x6c,0xb4,0xc7,0x52,0xf6,0x01;/log256是多项式表示到生成元的映
25、射表。使用的生成元为x+1byte log256 = 0x00,0x00,0x19,0x01,0x32,0x02,0x1a,0xc6,0x4b,0xc7,0x1b,0x68,0x33,0xee,0xdf,0x03,0x64,0x04,0xe0,0x0e,0x34,0x8d,0x81,0xef,0x4c,0x71,0x08,0xc8,0xf8,0x69,0x1c,0xc1,0x7d,0xc2,0x1d,0xb5,0xf9,0xb9,0x27,0x6a,0x4d,0xe4,0xa6,0x72,0x9a,0xc9,0x09,0x78,0x65,0x2f,0x8a,0x05,0x21,0x0f,0xe
26、1,0x24,0x12,0xf0,0x82,0x45,0x35,0x93,0xda,0x8e,0x96,0x8f,0xdb,0xbd,0x36,0xd0,0xce,0x94,0x13,0x5c,0xd2,0xf1,0x40,0x46,0x83,0x38,0x66,0xdd,0xfd,0x30,0xbf,0x06,0x8b,0x62,0xb3,0x25,0xe2,0x98,0x22,0x88,0x91,0x10,0x7e,0x6e,0x48,0xc3,0xa3,0xb6,0x1e,0x42,0x3a,0x6b,0x28,0x54,0xfa,0x85,0x3d,0xba,0x2b,0x79,0x0
27、a,0x15,0x9b,0x9f,0x5e,0xca,0x4e,0xd4,0xac,0xe5,0xf3,0x73,0xa7,0x57,0xaf,0x58,0xa8,0x50,0xf4,0xea,0xd6,0x74,0x4f,0xae,0xe9,0xd5,0xe7,0xe6,0xad,0xe8,0x2c,0xd7,0x75,0x7a,0xeb,0x16,0x0b,0xf5,0x59,0xcb,0x5f,0xb0,0x9c,0xa9,0x51,0xa0,0x7f,0x0c,0xf6,0x6f,0x17,0xc4,0x49,0xec,0xd8,0x43,0x1f,0x2d,0xa4,0x76,0x7
28、b,0xb7,0xcc,0xbb,0x3e,0x5a,0xfb,0x60,0xb1,0x86,0x3b,0x52,0xa1,0x6c,0xaa,0x55,0x29,0x9d,0x97,0xb2,0x87,0x90,0x61,0xbe,0xdc,0xfc,0xbc,0x95,0xcf,0xcd,0x37,0x3f,0x5b,0xd1,0x53,0x39,0x84,0x3c,0x41,0xa2,0x6d,0x47,0x14,0x2a,0x9e,0x5d,0x56,0xf2,0xd3,0xab,0x44,0x11,0x92,0xd9,0x23,0x20,0x2e,0x89,0xb4,0x7c,0xb
29、8,0x26,0x77,0x99,0xe3,0xa5,0x67,0x4a,0xed,0xde,0xc5,0x31,0xfe,0x18,0x0d,0x63,0x8c,0x80,0xc0,0xf7,0x70,0x07;/密钥扩展中使用的异或轮常数byte rcon104=0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x1b,0
30、x00,0x00,0x00,0x36,0x00,0x00,0x00;/轮密钥加void addroundkey(byte state4nb,byte p4nb)int i, j;for(i = 0; i 4; i+)for(j = 0; j nb; j+)stateij = stateijpij;/状态数组与每一轮子密钥异或/字节替换void subbytes(byte state4nb)int i, j;for(i = 0; i 4; i+)for(j = 0; j nb; j+)stateij = s_boxstateij;/行移位void shiftrows(byte state4nb)
31、 /void memcpy(void *destin,void *source,unsigned n) 操作为从source复制一个n个字节的块到destinbyte temp4;int time; /向左循环移位的位数for(time = 1; time 4; time+) memcpy(temp, statetime, time);/先存储需要左移的位到temp中memcpy(statetime, statetime+time, 4-time);/将余下的块左移memcpy(statetime+4-time, temp, time);/将事先存于temp中的位放到状态数组中 /列混合中使用
32、的mul函数byte mul(byte a, byte b)if(a != 0 & b != 0)return alog(loga + logb) % 255;/参考代码,不太懂else return 0;/列混合void mixcolumns(byte state4nb)byte temp4nb;int i, j;/将state函数存入temp中for(i = 0; i 4; i+)for(j = 0; j nb; j+)tempij = stateij;/按列做调用mul函数做列混合,以状态的每一列作为输入与混合每一列的数据得到新的列for(i = 0; i 4; i+)state0i =
33、 mul(0x02, temp0i) mul(0x03, temp1i) temp2i temp3i;state1i = mul(0x02, temp1i) mul(0x03, temp2i) temp0i temp3i; state2i = mul(0x02, temp2i) mul(0x03, temp3i) temp1i temp0i;state3i = mul(0x02, temp3i) mul(0x03, temp0i) temp2i temp1i;/字节变换 密钥扩展中使用void subwords(byte ank)int i;for(i = 0; i nk; i+)ai = s
34、_boxai;/左循环移位(只移一位) 密钥扩展中使用void rotword(byte tempnb)byte temp1;int i;temp1 = temp0;for(i = 1; i nb; i+)tempi-1 = tempi;tempnb-1 = temp1;/密钥扩展void keyexpansion(byte key4nk,byte wnr+1nk4)byte knb * (nr + 1)4; /计算是用二维数组(便于计算),最后存于三维数组w中byte tempnk;byte b 44;int i,j,l; /存储初始密钥for(i = 0; i 4; i+)for(j =
35、0; j nk; j+)kij = keyij;/计算扩展密钥for(i = nk; i nb * (nr + 1); i+)for(j = 0; j 4; j+)tempj = ki - 1j;if(i%nk = 0)rotword(temp);subwords(temp);for(j = 0; j 4 ; j+)tempj = tempjrconi/nk-1j;for(j = 0; j 4; j+) kij = ki-nkjtempj;printf(%x , kij);printf(n);for (i = 0; i nr + 1; i+)for (j = 0; j nk; j+)for (
36、l = 0; l 4; l+)wijl = k4 * i + jl;for (j = 0; j nk; j+)for (l = 0; l 4; l+)bjl = wilj;for (j = 0; j nk; j+)for (l = 0; l 4; l+)wijl = bjl;/加密模块void cipher(char file164, char file264)byte state4nb;int i, j, k;int round = 0;byte wnr+1nk4;byte out4nb;file *fp;openfile(file1, file2); /从文件中读取初始密钥和明文 keye
37、xpansion(key,w); /调用密钥扩展函数将所有的扩展密钥存于w数组中/将读入的明文进行转秩for(i = 0; i 4; i+)for(j = 0; j nb; j+)stateji = inij; /将初始明文和初始密钥存于文件中并在程序中输出 if (fp = fopen(加密要求输出结果.txt, w) = null)afxmessagebox(打开文件错误!);exit(0);fprintf(fp,初始明文:n);for(i = 0; i 4; i+)fprintf(fp,n);for(j = 0; j nb; j+)fprintf(fp,%0x ,stateij);fpr
38、intf(fp, nn初始密钥:n);for(i = 0; i 4; i+)fprintf(fp,n);for(j = 0; j nb; j+)fprintf(fp,%0x ,w0ji);addroundkey(state,wround); /初始轮密钥加 /开始循环nr轮 for(round = 1; round nr; round+)subbytes(state);shiftrows(state);mixcolumns(state);addroundkey(state, wround);if (round = 8)fprintf(fp, nn第九轮轮密钥:n);for (j = 0; j
39、4; j+)fprintf(fp, nw%d= , (round+1)*4+j);for (k = 0; k 4; k+)fprintf(fp, %x , wround+1kj);fprintf(fp, nn明文加密到第九轮:n);for (j = 0; j 4; j+)fprintf(fp, n);for (k = 0; k 4; k+)fprintf(fp, %x , statejk); subbytes(state); shiftrows(state); addroundkey(state, wround); fprintf(fp, nn第十轮轮密钥:n);for (j = 0; j 4
40、; j+) fprintf(fp, nw%d= ,round*4+j);for (k = 0; k 4; k+)fprintf(fp, %x , wroundkj);fprintf(fp, nn加密完成后输出:n);for (j = 0; j 4; j+)fprintf(fp, n);for (k = 0; k 4; k+)fprintf(fp, %x , statejk);fclose(fp);if (fp = fopen(ciphermessage.txt, w) = null)afxmessagebox(打开文件错误!);exit(0); for(i = 0; i 4; i+)for(j
41、 = 0; j nb; j+)outji = stateij;for(i = 0; i 4; i+)for(j = 0; j 0, position 4; time-, position+)memcpy(temp, stateposition, time);memcpy(stateposition, stateposition+time, 4-time);memcpy(stateposition+4-time, temp, time);/逆字节替代void invsubbytes(byte state4nb)int i, j;for(i = 0; i 4; i+)for(j = 0; j nb
42、; j+)stateij = invs_boxstateij;/逆列混合void invmixcolumns(byte state4nb) byte temp4nb;int i, j;for(i = 0; i 4; i+)for(j = 0; j nb; j+)tempij = stateij;for(i = 0; i 4; i+)state0i = mul(0x0e, temp0i) mul(0x0b, temp1i) mul(0x0d, temp2i) mul(0x09, temp3i);state1i = mul(0x0e, temp1i) mul(0x0b, temp2i) mul(0
43、x09, temp0i) mul(0x0d, temp3i); state2i = mul(0x0e, temp2i) mul(0x0b, temp3i) mul(0x09, temp1i) mul(0x0d, temp0i);state3i = mul(0x0e, temp3i) mul(0x0b, temp0i) mul(0x09, temp2i) mul(0x0d, temp1i);/解密模块void invcipher(char file164, char file264)byte state4nb;byte wnr+1nk4;byte out4nb;int i, j, k;file
44、*fp;int round = 10;openfile(file1, file2);keyexpansion(key,w);for(i = 0; i 4; i+)for(j = 0; j nb; j+)stateji = inij;/将初始密文和初始密钥存入文件中并在程序中输出 if (fp = fopen(解密要求输出结果.txt, w) = null)afxmessagebox(打开文件错误!);exit(0);fprintf(fp,初始密文:n);for(i = 0; i 4; i+)fprintf(fp,n);for(j = 0; j nb; j+)fprintf(fp,%0x ,stateij);fprintf(fp, nn初始密钥:n);for(i = 0; i 4; i+)fprintf(fp,n);for(j = 0; j 0; round-)printf(第%d轮n, round);invshiftrows(state);invsubbytes(state);addroundkey
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流仓储行业仓库管理员工作KPI考核表
- 家电售后服务专员客户问题解决能力与满意度KPI考核表
- 供应商交货时间提前变更确认通知函(3篇)范文
- 网络公司网站维护技术人员工作效率KPI考核表
- 高性能材料研发指南手册
- 教育工作者学生成绩与教学成效考核表
- 数据加密技术在电子商务安全中的应用指南
- 电信运营商客户关系经理KPI考核表
- 安全教育警钟鸣小学主题班会课件
- 维修办公室空调设备通知5篇范文
- 2026年6月成都兴城投资集团有限公司成都蓉城城市管理服务有限公司校园招聘11人笔试题库含答案详解(夺分金卷)
- 船舶排污污染防控与海洋环保管理手册
- (2026年)小儿静脉输液外渗的预防及处理课件
- 保安形象展示培训
- 垃圾焚烧电厂锅炉培训
- 2026年水利安全生产考核b证押题宝典通关考试题库及参考答案详解
- 2025版肺癌合并间质性肺疾病诊疗专家共识解读课件
- 《TB-T 1979-2023 机车车辆特种金属材料 耐大气腐蚀钢》
- 2026浙江台州市温岭市市场监督管理局招聘编外1人笔试参考题库及答案解析
- (教师版)必修下册课内文言文挖空+名句名篇默写小纸条滚动训练高中语文统编版选择性必修下册
- 2025年荔湾教师社招笔试真题及答案
评论
0/150
提交评论