ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:86.01KB ,
资源ID:17661060      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17661060.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验1 安全数据传输综合实验Word文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验1 安全数据传输综合实验Word文档下载推荐.docx

1、3.编程实现实验内容1,请给出每个中间过程的关键数据及源代码。对称密码算法采用AES(密钥长度在128位、192位、256位中进行3选1即可), 公钥密码算法采用RSA 。六、实验要求1.明文为:0011 2233 4455 6677 8899 aabb ccdd eeff,AES算法的密钥为:0001 0203 0405 0607 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617,RSA 算法的公私钥自定。2.完成实验内容1和实验内容2。3.对于实验内容3的实现部分,可以2人1小组,也可以1人1小组。2人小组需要实现AES和RSA两个加密算法,而1人小组只需实现

2、RSA加密算法即可,有余力者也可以实现两个算法。不论是2人小组还是1人小组,实现全部两个加密算法都可以获得适当的实验加分。AES算法要求实现效果范例:RSA算法要求实现效果范例:4.完成实验报告,要求有实验过程、代码实现和说明、效果截图和心得体会。5.保存并提交这次实验的代码,命名为aes.cpp和rsa.cpp,然后放在一个独立的文件夹下。七、实现提示和部分代码1.关于AES算法的实现1)如何存储明文和密钥/ 数组 temp 保存 key./ 数组 temp2 保存明文. unsigned char temp32 = 0x00 ,0x01 ,0x02 ,0x03 ,0x04 ,0x05 ,0

3、x06 ,0x07 ,0x08 ,0x09 ,0x0a ,0x0b ,0x0c ,0x0d ,0x0e ,0x0f, 0x10 ,0x11 ,0x12 ,0x13, 0x14 ,0x15 ,0x16 ,0x17; unsigned char temp232 = 0x00 ,0x11 ,0x22 ,0x33 ,0x44 ,0x55 ,0x66 ,0x77 ,0x88 ,0x99 ,0xaa ,0xbb ,0xcc ,0xdd ,0xee ,0xff;2)密钥扩展KeyExpansion/ Keyexpansion函数生成Nb(Nr+1)个轮密钥roundkey用来加密每轮的statevoid K

4、eyExpansion() int i,j; unsigned char temp4; for(i = 0;i Nk;i+) / 将密钥Key的初始值赋给轮密钥RoundKey RoundKey4*i = Key4*i; RoundKey4*i+1 = Key4*i+1; RoundKey4*i+2 = Key4*i+2; RoundKey4*i+3 = Key4*i+3; for(i = Nk; Nb*(Nr+1);i+) / 生成Nb(Nr+1)个轮密钥roundkey temp0 = RoundKey4*(i-1); temp1 = RoundKey4*(i-1)+1; temp2 =

5、RoundKey4*(i-1)+2; temp3 = RoundKey4*(i-1)+3; if(i % Nk = 0) / 循环左移RotWord char temp1 = temp0; temp0 = temp1; temp1 = temp2; temp2 = temp3; temp3 = temp1; / S-Box操作SubWord for(j = 0;j 4;j+) int num = (int)tempj; tempj = (char)getSBoxValue(num); / temp = temp Rcon temp0 = temp0 (char)Rconi/Nk; else i

6、f(Nk = 8&(i % Nk = 4) / 此处用于256位密钥长度时的操作 RoundKey4*i = RoundKey4*(i-Nk) temp0; RoundKey4*i+1 = RoundKey4*(i-Nk)+1 temp1; RoundKey4*i+2 = RoundKey4*(i-Nk)+2 temp2; RoundKey4*i+3 = RoundKey4*(i-Nk)+3 temp3; 3)S-Box操作、逆S-Box操作和轮常数数组Rcon/ S-box操作int getSBoxValue(int num) int sbox256 = /0 1 2 3 4 5 6 7 8

7、 9 A B C D E F 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, /0 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, /1 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x3

8、1, 0x15, /2 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, /3 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, /4 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58,

9、0xcf, /5 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, /6 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, /7 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x7

10、3, /8 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, /9 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, /A 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,

11、/B 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, /C 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, /D 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, /E

12、0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 ; /F return sboxnum;/ 逆S-box操作int getSBoxInvert(int num) int rsbox256 = 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb , 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f,

13、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, 0x1

14、6, 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,

15、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, 0x6

16、2, 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,

17、0x93, 0xc9, 0x9c, 0xef , 0xa0, 0xe0, 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 ; return rsboxnum;/ 轮常数数组, Rconi int Rcon255 = 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10,

18、0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08,

19、0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04,

20、0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02,

21、0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01,

22、0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb ;4)列混合变

23、换和逆列混合变换/ xtime 是计算16进制乘以02的宏#define xtime(x) (x7) & 1) * 0x1b)/ Multiplty 是计算在域 GF(28)中的数字乘法的宏#define Multiply(x,y) (y & 1) * x) (y1 & 1) * xtime(x) (y2 & 1) * xtime(xtime(x) (y3 & 1) * xtime(xtime(xtime(x) (y4 & 1) * xtime(xtime(xtime(xtime(x)/ Matrix是列混合变换所需的矩阵unsigned char Matrix16 = 0x02 ,0x03

24、,0x01 ,0x01 ,0x01 ,0x02 ,0x03 ,0x01 ,0x01 ,0x01 ,0x02 ,0x03 ,0x03 ,0x01 ,0x01 ,0x02;/ InvMatrix是逆列混合变换所需的矩阵unsigned char InvMatrix16 = 0x0e ,0x0b ,0x0d ,0x09 ,0x09 ,0x0e ,0x0b ,0x0d ,0x0d ,0x09 ,0x0e ,0x0b ,0x0b ,0x0d ,0x09 ,0x0e;/ 列混合变换void MixColumns() char state144; Nb;i+) / 先将state复制给state1,stat

25、e是明文变换为密文过程中的中间结果 for(j = 0; state1ij = stateij;i+) / 将state1和矩阵Matrix的乘积赋给state,state是明文变换为密文过程中的中间结果 stateji = Multiply(state10i,Matrix4*j) Multiply(state11i,Matrix4*j+1) Multiply(state12i,Matrix4*j+2) Multiply(state13i,Matrix4*j+3); / 逆列混合变换void InvMixColumns() / 将state1和矩阵InvMatrix的乘积赋给state,sta

26、te是明文变换为密文过程中的中间结果 stateji = Multiply(state10i,InvMatrix4*j) Multiply(state11i,InvMatrix4*j+1) Multiply(state12i,InvMatrix4*j+2) Multiply(state13i,InvMatrix4*j+3);5)加密函数/ 加密函数.void Cipher() int i = 0; int j = 0; int k = 0; int round = 0; / 明文in赋值给state,state是明文变换为密文过程中的中间结果 stateji = ink; / state(i,j) - state(j,i) k+; AddRoundKey(round); / 前Nr-1轮加密 for(round = 1;round Nr;round+) SubBytes(); ShiftRows(); MixColumns(); AddRoundKey(round); / 最后一轮加密 SubBytes(); ShiftRows(); AddRoundKey(Nr); k = 0; / 密文state赋值给o

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1