搜档网
当前位置:搜档网 › 密码学课程方案AES加密解密文档

密码学课程方案AES加密解密文档

密码学课程方案AES加密解密文档
密码学课程方案AES加密解密文档

个人资料整理仅限学习使用

成都信息工程学院课程设计报告

AES加密解密的实现

课程名称:应用密码算法程序设计

学生姓名:

学生学号:

专业班级:

任课教师:

年月日

个人资料整理仅限学习使用

附件:课程设计成绩评价表

个人资料整理仅限学习使用目录

1.背景

AES,密码学中的高级加密标准

密钥大小。

该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。

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功能模块与系统结构

主要功能模块如下:

2.行移位ShiftRow

3.列混合MixColumn

4.轮密钥加AddRoundKey

5.逆字节替换

通过逆S盒的映射变换得到

6.逆行移位InvShiftRow

与加密时的行移位区别在于移位方向相反。

7.逆列混淆

加密与解密系统流程图如下所示,

3 系统功能程序设计

3.1基本要求部分 3.1.1字节替换

SubBytes<)变换是一个基于S 盒的非线性置换,它用于将输入或中间态的每一个字节通过一个简单的查表操作,将其映射为另一个字节。映射方法是把输入字节的高四位作为S 盒的行值,低四位作为列值,然后取出S 盒中对应的行和列的元素作为输出。unsigned char subbytes(unsigned char state[4][4]>

{printf("after subbyte:\n">。 //取出中间态state 映射到S 盒中的值赋给中间态state for(i=0。i<4。i++>

1

{for(j=0。j<4。j++>

state[i][j]=sbox[state[i][j]]。 }

for(i=0。i<4。i++> //输出到屏幕显示state

{for(j=0。j<4。j++>

printf("\t\t%02x ",state[i][j]>。

printf("\n">。

}

printf("\n">。

return 0。

}

3.1.2行移位

ShiftRows<)完成基于行的循环移位操作,变换方法是第0行不动,第一行循环左移一个字节,第二位循环左移两个字节,第三行循环左移三个字节。

unsigned char shiftrows(unsigned char state[4][4]>

{printf("after shiftrows:\n">。 // 在中间态的行上,

k=state[1][0]。 // 第0行不变

state[1][0]=state[1][1]。 // 第一行循环左移一个字节

state[1][1]=state[1][2]。 // 第二行循环左移两个字节

state[1][2]=state[1][3]。 // 第三行循环左移三个字节

state[1][3]=k。

k=state[2][0]。

state[2][0]=state[2][2]。

state[2][2]=k。

k=state[2][1]。

state[2][1]=state[2][3]。

state[2][3]=k。

k=state[3][0]。

state[3][0]=state[3][3]。

state[3][3]=state[3][2]。

state[3][2]=state[3][1]。

state[3][1]=k。

for(i=0。i<4。i++> //输出到屏幕显示state

{for(j=0。j<4。j++>

printf("\t\t%02x ",state[i][j]>。

printf("\n">。

}

printf("\n">。

return 0。

}

3.1.3列混合

MixColumns<)实现逐列混合,方法是s’(x>=c(x>*s(x>mod(x^4+1>

unsigned char mixcolumns(unsigned char state[4][4]>

{ printf("after mixcolumns:\n">。// 实现 (02 03 01 01> 与中间态state分别相乘后异或得相应值

for(i=0。i<4。i++> // (01 02 03 01>

{ // (01 01 02 03>

k=state[0][i]。 // (03 01 01 02>

temp[0] = state[0][i] ^ state[1][i] ^ state[2][i] ^ state[3][i] 。

temp[1] = state[0][i] ^ state[1][i] 。 temp[1] = xtime(temp[1]>。 state[0][i] ^= temp[1] ^ temp[0] 。

temp[1] = state[1][i] ^ state[2][i] 。 temp[1] = xtime(temp[1]>。 state[1][i] ^= temp[1] ^ temp[0] 。

temp[1] = state[2][i] ^ state[3][i] 。 temp[1] = xtime(temp[1]>。 state[2][i] ^= temp[1] ^ temp[0] 。

temp[1] = state[3][i] ^ k 。temp[1] = xtime(temp[1]>。state[3][i] ^= temp[1] ^ temp[0] 。

}

for(i=0。i<4。i++> //输出到屏幕显示state

{for(j=0。j<4。j++>

printf("\t\t%02x ",state[i][j]>。

printf("\n">。

}

printf("\n">。

return 0。

}

3.1.4轮密钥加

AddRoundKey(>用于将输入或中间态S的每一列与一个密钥字ki进行按位异或,每一个轮密钥由Nb个字组成。

unsigned char addroundkey(unsigned char state[4][4],unsigned char w[4][4]>

{ printf("addroundkey %d:\n",round++>。

//将中间态state中的每一列与一个密钥字(w[4][4]中的一列>进行按位异或

for(i=0。i<4。i++> //完了又赋值给state

{for(j=0。j<4。j++>

state[i][j]^=w[i][j]。}

for(i=0。i<4。i++> //输出到屏幕显示出来state

{for(j=0。j<4。j++>

printf("\t\t%02x ",state[i][j]>。

printf("\n">。}

printf("\n">。

return 0。

}

3.1.5密钥扩展

通过生成器产生Nr+1个轮密钥,每个轮密钥由Nb个字组成,共有Nb

//keyexpand

printf("after keyexpand:\n">。

for(i=4。i<8。i++>

{

if(i%4==0>

{ rotword[0]=w[1][i-1]。

rotword[1]=w[2][i-1]。

rotword[2]=w[3][i-1]。

rotword[3]=w[0][i-1]。

printf("rotword(>:">。

for(j=0。j<4。j++> printf("%02x ",rotword[j]>。

for(j=0。j<4。j++>

subword[j]=sbox[rotword[j]]。

printf("\nsubword(>:">。

for(j=0。j<4。j++> printf("%02x ",subword[j]>。 printf("\n\n">。

for(j=0。j<4。j++>

rcon[j]=subword[j]^ Rcon[N][j] 。

printf("after ^Rcon(>:">。

for(j=0。j<4。j++> printf("%02x ",rcon[j]>。 printf("\n\n">。

for(j=0。j<4。j++>

w[j][i%4]=rcon[j]^ w[j][i-4] 。

printf("w[%d] :",count>。

for(j=0。j<4。j++> printf(" %02x ",w[j][i%4]> 。

count++。

}

else

{

for(j=0。j<4。j++>

w[j][i%4]=w[j][i%4]^w[j][(i%4>-1]。

printf("w[%d] :",count>。

for(j=0。j<4。j++> printf(" %02x ",w[j][i%4]>。

count++。

}

printf("\n\n">。

}

printf("密钥扩展 Round key:\n">。

for(i=0。i<4。i++>

{for(j=0。j<4。j++> printf("\t\t%02x ",w[i][j]>。

printf("\n">。}

printf("\n">。

3.1.6逆字节替换

与字节代替类似,逆字节代替基于逆S盒实现。

unsigned char InvSubbytes(unsigned char state[4][4]>

{ for(i=0。i<4。i++> //基于逆S盒的映射替代

{for(j=0。j<4。j++>

{ state[i][j] = rsbox[state[i][j]]。}

}

printf("after InvSubbyte:\n">。

for(i=0。i<4。i++>

{for(j=0。j<4。j++> //输出到屏幕显示state

printf("\t\t%02x ",state[i][j]>。

printf("\n">。

}

printf("\n">。

return 0。

}

3.1.7逆行移位

与行移位相反,逆行移位将态state的后三行按相反的方向进行移位操作,即第0行保持不变,第1行循环向右移一个字节,第2行循环向右移动两个字节,第3行循环向右移动三个字节。

unsigned char InvShiftRows(unsigned char state[4][4]>

{ k=state[1][3]。

state[1][3]=state[1][2]。 //对中间态state进行移位操作

state[1][2]=state[1][1]。 // 第0行保持不变

state[1][1]=state[1][0]。 // 第1行循环右移一个字节

state[1][0]=k。 // 第2行循环右移两个字节

// 第3行循环右移三个字节

k=state[2][0]。

state[2][0]=state[2][2]。

state[2][2]=k。

k=state[2][1]。

state[2][1]=state[2][3]。

state[2][3]=k。

k=state[3][0]。

state[3][0]=state[3][1]。

state[3][1]=state[3][2]。

state[3][2]=state[3][3]。

state[3][3]=k。

printf("after InvShiftRows:\n">。

for(i=0。i<4。i++> //输出到屏幕显示state

{for(j=0。j<4。j++>

printf("\t\t%02x ",state[i][j]>。

printf("\n">。

}

printf("\n">。

return 0。

}

3.1.8逆列混合

逆列混淆的处理办法与MixColumns<)类似,每一列都通过与一个固定的多项式d(x>相乘进行交换。

unsigned char InvMixColumns(unsigned char state[4][4]>

{ printf("after InvMixColumns :\n">。

//实现(0e 0b 0d 09>与中间态state分别相乘后异或得相应值

for(i=0。i<4。i++> // (09 0e 0b 0d>

{ temp[0] = state[0][i]。 // (0d 09 0e 0b>

temp[1] = state[1][i]。 // (0b 0d 09 0e>

temp[2] = state[2][i]。

temp[3] = state[3][i]。

state[0][i] = Multiply(temp[0], 0x0e> ^ Multiply(temp[1], 0x0b> ^ Multiply(temp[2], 0x0d> ^ Multiply(temp[3], 0x09>。

state[1][i] = Multiply(temp[0], 0x09> ^ Multiply(temp[1], 0x0e> ^ Multiply(temp[2], 0x0b> ^ Multiply(temp[3], 0x0d>。

state[2][i] = Multiply(temp[0], 0x0d> ^ Multiply(temp[1], 0x09> ^ Multiply(temp[2], 0x0e> ^ Multiply(temp[3], 0x0b>。

state[3][i] = Multiply(temp[0], 0x0b> ^ Multiply(temp[1], 0x0d> ^ Multiply(temp[2], 0x09> ^ Multiply(temp[3], 0x0e>。

}

for(i=0。i<4。i++> //输出到屏幕显示state

{for(j=0。j<4。j++>

printf("\t\t%02x ",state[i][j]>。

printf("\n">。}

printf("\n">。

return 0。

}

3.1.9 加密

加密部分我分了两种情况,一种是自动检查加密程序的正确性,之前在程序里给明文和密钥赋上初值,运行程序检验结果是否正确;另一种是用户手动

输入32位的十六进制数,进行加密,我是把每一具体项模块化,将功能在每个具体模块中实现,只需要直接调用,视觉效果强,一目了然。

下面是实现加密功能一些关键代码

void AES_encrypt(unsigned char State[][N], unsigned char RoundKey[][N]>

{message[16]={0x32,0x43,0xf6,0xa8,0x88,0x5a,0x30,0x8d,0x31,0x31,0x98,0xa2,0xe0,0x37,0x0 7,0x34}。

key[16]={0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c}。

for(i=0。i<4。i++>{ for(j=0。j<4。j++> // 分别获取明文和密钥

{state[j][i]=message[m]。w[j][i]=key[m]。m++。}

}.

addroundkey(state,w>。

for(round=2。round<11。round++>

{ printf("第 %d 轮加密 : \n",round>。

subbytes(state>。

shiftrows(state>。

mixcolumns(state>。

keyexpand(w, round>。

addroundkey(state,w>。

}

subbytes(state>。 //最后一轮

shiftrows(state>。

keyexpand(w, 10>。

addroundkey(state,w>。

}

3.1.10 解密

AES解密我也是分成了两个部分,第一部分是在程序中对密文和密钥赋初值,通过与标准对照检查解密过程的正确性;第二部分是用户手动输入密文和密钥,程序对其进行解密,得到最后的明文。

解密过程基本如下:

1)获取输入的明文和密钥 2)通过密钥扩展过程获取各轮密钥 3)轮密钥加变换过程4)逆行移位 5)逆字节替代 6)轮密钥加变换 7)逆列混淆

4—7步共9次循环,最后一轮实现4—6步,完成解密过程。

主要代码如下:

void AES_decrypt(unsigned char State[][N], unsigned char w[][N]>

{key[16]={0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c }。

cipher[16]={0x39,0x25,0x84,0x1d,0x02,0xdc,0x09,0xfb,0xdc,0x11,0x85,0x97,0x19,0x6a,0x0b,0 x32}。

printf("%02x ",key[i]>。printf("\n">。 /获取密文和密钥

for(i=0。i<4。i++>

{ for(j=0。j<4。j++>

{state[j][i]=cipher[m]。w[j][i]=key[m]。m++。}

}

Keyexpand(w,round >。 //获得密钥扩展列表

AddRoundKey(State, w>。 //首轮

for (i = 9。 i > 0。 i --> //1-9轮

{InvShiftRows(state>。

InvSubbytes(state>。

Keyexpand(w,round >。

AddRoundKey(State, w>。

InvMixColumns(State>。

}

InvShiftRows(State>。 //最后一轮

InvSubBytes(State>。

Keyexpand(w,0 >。

AddRoundKey(State, w>。

}

4. 测试报告

为检验程序的正确性,需要将结果与标准相对照。参照老师课件里的AES运行程序的运行结果,与我的运行结果对照如下:

下面是我的运行界面:

上面的是标准,接着的是我的运行测试,下面的是我从终端中复制的过程:密钥扩展 Round key:

ef a8 b6 db

44 52 71 0b

a5 5b 25 ad

41 7f 3b 00

addroundkey 5 :

e0 c8 d9 85

92 63 b1 b8

7f 63 35 be

e8 c0 50 01

第 6 轮加密 :

after subbyte:

e1 e8 35 97

4f fb c8 6c

d2 fb 96 ae

9b ba 53 7c

after shiftrows:

e1 e8 35 97

fb c8 6c4f

96 ae d2 fb

7c 9b ba 53

after mixcolumns:

25 bd b6 4c

d1 11 3a4c

a9 d1 33 c0

ad 68 8e b0

after keyexpand:

rotword(>:0b ad 00 db

subword(>:2b 95 63 b9

after ^Rcon(>:3b 95 63 b9

w[20] : d4 d1 c6 f8

w[21] : 7c 83 9d 87

w[22] : ca f2 b8 bc

w[23] : 11 f9 15 bc

密钥扩展 Round key:

d4 7c ca 11 d1 83 f2 f9 c6 9d b8 15 f8 87 bc bc addroundkey 6 :

f1 c1 7c 5d 00 92 c8 b5 6f4c 8b d5

55 ef 32 0c 第 7 轮加密 :

after subbyte:

a1 78 10 4c 63 4f e8 d5 a8 29 3d 03 fc df 23 fe after shiftrows:

a1 78 10 4c 4f e8 d5 63

3d 03 a8 29 fe fc df 23 after mixcolumns:

4b 2c 33 37 86 4a 9d d2 8d 89 f4 18 6d 80 e8 d8 after keyexpand:

rotword(>:f9 15 bc 11

subword(>:99 59 65 82

after ^Rcon(>:b9 59 65 82

w[24] : 6d 88 a3 7a

w[25] : 11 0b 3e fd

w[26] : db f9 86 41

w[27] : ca 00 93 fd

密钥扩展 Round key:

6d 11 db ca 88 0b f9 00 a3 3e 86 93 7a fd 41 fd addroundkey 7 :

26 3d e8 fd 0e 41 64 d2 2e b7 72 8b 17 7d a9 25 第 8 轮加密 :

after subbyte:

f7 27 9b 54 ab 83 43 b5 31 a9 40 3d

f0 ff d3 3f after shiftrows:

f7 27 9b 54 83 43 b5 ab 40 3d 31 a9 3f f0 ff d3

after mixcolumns:

14 46 27 34

15 16 46 2a b5 15 56 d8 bf ec d7 43 after keyexpand:

rotword(>:00 93 fd ca

subword(>:63 dc 54 74

after ^Rcon(>:23 dc 54 74

w[28] : 4e 54 f7 0e

w[29] : 5f5f c9 f3

w[30] : 84 a6 4f b2

w[31] : 4e a6 dc 4f

密钥扩展 Round key:

4e 5f 84 4e 54 5f a6 a6 f7 c9 4f dc 0e f3 b2 4f addroundkey 8 :

5a19 a3 7a

41 49 e0 8c

42 dc 19 04 b1 1f 65 0c 第 9 轮加密 :

after subbyte:

be d4 0a da 83 3b e1 64 2c 86 d4 f2

c8 c0 4d fe

after shiftrows:

be d4 0a da 3b e1 64 83 d4 f2 2c 86 fe c8 c0 4d after mixcolumns:

00 b1 54 fa 51 c8 76 1b

2f 89 6d 99

d1 ff cd ea after keyexpand:

文件加密与解密实验报告

HUNAN UNIVERSITY 程序设计训练——文件加密与解密 报告 学生姓名X X X 学生学号20110102308 专业班级建环308 指导老师何英 2012-07-01至 2012-07-13

一、程序设计目的和要求 (3) 二、程序设计内容 (4) 1、总体设计 (4) 1.1主控选择模块 (4) 1.2加密模块 (4) 1.3解密模块 (4) 2、流程图 (5) 三模块详细说明 (6) 四、测试数据及其结果 (7) 五、课程设计总结 (8) 六、附录 (9) 附录1:参考文献 (9) 附录2:程序源代码 (9)

一、程序设计目的和要求 1、目的:为保证个人数据资料不被他人窃取使用,保护个人隐私及个人文件。设计一个基于c语言的文本文件加密及解密软件,可以方便对文本文件的加密与解密。本设计实现了文本文件的解密及解密,运行软件之后只需输入任意一个文本文件的文件名及后缀名即可对该文本文件进行加密或解密操作。本设计的加密与解密系统,使用了面向各类文件的方法,运用Microsoft Visual C++ 6.0实现具有加密、解密、帮助信息、读取文本文件、显示结果、退出等功能的文件加密与解密系统。 2、要求: (1)从键盘输入要进行加密的一行字符串或者需要加密的文件名。 (2)显示菜单: (3)选择菜单,进行相应的操作。加密方法是设置一加密字符串以及对文件的哪些部分进行加密;加密是将原始文件加密并保存到文件中;解密是将加了密的文件还原并保存到文件中,同时应比较与原始文件的一致性; 3、其他要求 (1)变量、函数命名符合规范。 (2)注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。

信息安全加密实验报告

重庆交通大学实验报告 班级:计信专业2012级2班 学号: 631206060232 姓名:娄丽梅 实验项目名称:DES加解密程序设计与实现 实验项目性质:设计性(验证性) 实验所属课程:信息安全 实验室(中心):软件实验室 指导教师:米波 实验完成时间: 2014 年12月11日

一、实验目的 1、理解DES加密与解密的程序设计算法思想。 2、编写DES加密与解密程序,实现对明文的加密与解密,加深对数据加密与解密的理解,掌握DES加密算法思想,提高网络安全的编程能力。 二、实验主要内容及原理 (一)实验内容 1、掌握DES算法; 2、编写DES算法。 (二)实验原理 1、初始置换 初始置换在第一轮运算之前执行,对输入分组实施如下表所示的变换。此表应从左向右、从上向下读。在将这64位数据分为左右两部分,每部分分别为32位,将左32位留下,将右32位按照下表进行排列 2、密钥置换 一开始,由于不考虑每个字节的第8位,DES的密钥由64位减至56位。每个字节第8位可作为奇偶校验位以确保密钥不发生错误。接着,56位密钥被分成两部分,每部分28位。然后,根据轮数,这两部分分别循环左移l位或2位。在DES的每一轮中,从56位密钥选出48位子密钥(Sub Key)。 3、S盒置换 当产生了48位密钥后就可以和右边32位明文进行异或运算了,得到48位的密文。 再经过下论的S盒跌带,其功能是把6bit数据变为4bit数据,每个S盒是一个4行、16列的表。盒中的每一项都是一个4位的数。S盒的6个位输入确定了其对应的输出在哪一行哪一列。 4、P盒置换 S盒代替运算后的32位输出依照P盒进行置换。该置换把每输入位映射到输出位,任意一位不能被映射两次,也不能被略去,这个置换叫做直接置换。 5、再次异或运算 最后,将P盒置换的结果与最初的64位分组的左半部分异或,然后左、右半部分交换,接着开始另一轮。 6、当进行到16轮后,最终进行一次末置换,形成密文

数据加密实验报告

实验报告 课程:计算机保密_ _ 实验名称:数据的加密与解密_ _ 院系(部):计科院_ _ 专业班级:计科11001班_ _ 学号: 201003647_ _ 实验日期: 2013-4-25_ _ 姓名: _刘雄 _ 报告日期: _2013-5-1 _ 报告评分:教师签字:

一. 实验名称 数据加密与解密 二.运行环境 Windows XP系统 IE浏览器 三.实验目的 熟悉加密解密的处理过程,了解基本的加密解密算法。尝试编制基本的加密解密程序。掌握信息认证技术。 四.实验内容及步骤 1、安装运行常用的加解密软件。 2、掌握加解密软件的实际运用。 *3、编写凯撒密码实现、维吉尼亚表加密等置换和替换加解密程序。 4、掌握信息认证的方法及完整性认证。 (1)安装运行常用的加解密软件,掌握加解密软件的实际运用 任务一:通过安装运行加密解密软件(Apocalypso.exe;RSATool.exe;SWriter.exe等(参见:实验一指导))的实际运用,了解并掌握对称密码体系DES、IDEA、AES等算法,及非对称密码体制RSA等算法实施加密加密的原理及技术。 ?DES:加密解密是一种分组加密算法,输入的明文为64位,密钥为56位,生成的密文为64位。 ?BlowFish:算法用来加密64Bit长度的字符串或文件和文件夹加密软件。 ?Gost(Gosudarstvennyi Standard):算法是一种由前苏联设计的类似DES算法的分组密码算法。它是一个64位分组及256位密钥的采用32轮简单迭代型加密算法. ?IDEA:国际数据加密算法:使用128 位密钥提供非常强的安全性; ?Rijndael:是带有可变块长和可变密钥长度的迭代块密码(AES 算法)。块长和密钥长度可以分别指定成128、192 或256 位。 ?MISTY1:它用128位密钥对64位数据进行不确定轮回的加密。文档分为两部分:密钥产生部分和数据随机化部分。 ?Twofish:同Blowfish一样,Twofish使用分组加密机制。它使用任何长度为256比特的单个密钥,对如智能卡的微处理器和嵌入在硬件中运行的软件很有效。它允许使用者调节加密速度,密钥安装时间,和编码大小来平衡性能。 ?Cast-256:AES 算法的一种。 (同学们也可自己下载相应的加解密软件,应用并分析加解密过程) 任务二:下载带MD5验证码的软件(如:https://www.sodocs.net/doc/151444361.html,/downloads/installer/下载(MySQL):Windows (x86, 32-bit), MSI Installer 5.6.11、1.5M;MD5码: 20f788b009a7af437ff4abce8fb3a7d1),使用MD5Verify工具对刚下载的软件生成信息摘要,并与原来的MD5码比较以确定所下载软件的完整性。或用两款不同的MD5软件对同一文件提取信息摘要,而后比较是否一致,由此可进行文件的完整性认证。

AES加密解密实验报告

信息安全工程课程 实验报告 AES加密解密的实现 课程名称:信息安全工程 学生姓名:黄小菲 学生学号: 3112041006 专业班级:系统工程2038班 任课教师:蔡忠闽 2012年11月22日

目录 1.背景 (1) 1.1 Rijndael密码的设计标准: (1) 1.2 设计思想 (1) 2.系统设计 (2) 2.1系统主要目标 (2) 2.2功能模块与系统结构 (2) 2.2.1字节替换SubByte (2) 2.2.2行移位ShiftRow (2) 2.2.3 列混合MixColumn (3) 2.2.4 轮密钥加AddRoundKey (4) 2.2.5 逆字节替换 (4) 2.2.6逆行移位InvShiftRow (4) 2.2.7 逆列混淆 (4) 3 加密模式 (5) 3.1 电子密码本ECB模式 (5) 3.2加密块链模式CBC模式 (6) 4 系统功能程序设计 (8) 4.1基本加密部分 (8) 4.1.1字节替换 (8) 4.1.2行移位 (8) 4.1.3列混合 (9) 4.1.4轮密钥加 (9) 4.1.5密钥扩展 (10) 4.1.6逆字节替换 (11) 4.1.7逆行移位 (11) 4.1.8逆列混合 (12) 4.1.9加密 (12) 4.1.10解密 (13) 5 实验结果 (14) 5.1 需要加密文件 (14) 5.2 实验加密解密结果 (15) 6 参考资料 (16)

1.背景 AES,密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。AES 有一个固定的128位的块大小和128,192或256位大小的密钥大小。Rijndael算法汇聚了安全性、效率高、易实现性和灵活性等优点,是一种较DES更好的算法。 该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。(Rijdael的发音近于"Rhine doll"。)AES在软体及硬件上都能快速地加解密,相对来说较易于实作,且只需要很少的记忆体。作为一个新的加密标准,目前正被部署应用到更广大的范围. 1.1 Rijndael密码的设计标准: ①抵抗所有已知的攻击。 ②在多个平台上速度快,编码紧凑。 ③设计简单。 当前的大多数分组密码,其轮函数是Feistel结构。 Rijndael没有这种结构。 Rijndael轮函数是由3个不同的可逆均匀变换 1.2 设计思想 ?分组和密钥长度可变,各自可独立指定为128、192、256比特。 ?状态 ?算法中间的结果也需要分组,称之为状态,状态可以用以字节为元素的矩阵 阵列表示,该阵列有4行,列数N b为分组长度除32 ?种子密钥 ?以字节为元素的矩阵阵列描述,阵列为4行,列数N k为密钥长度除32

加密技术及密码破解实验报告

第九章、实验报告 实验一、设置Windows启动密码 一、实验目的:利用Windows启动密码保存重要文件。 二、实验步骤: 1、在Windows XP系统中选择开始——运行,在打开输入框中“syskey.exe”,点击确定,打开“保证Windows XP账户数据库的安全”对话框。 2、单击【更新】,打开【启动密码】对话框,然后输入密码,在【确认】文本框中再次输入密码,单击【确定】

实验二、为word文档加密解密 一、实验目的:保护数据的安全 二、实验步骤: 1、打开一个需要加密的文档,选择【工具】——【选项】——【安全性】然后输入想要设置打开文件时所需的密码 2、单击【高级(A)】打开加密类型对话框,选中【加密文档属性】复选框,单击【确定】。

3、打开文件的【确认密码】对话框,输入打开文件时需要的密码,单击【确定】,随即打开【确认密码】对话框,输入密码。 4、保存文件后,重新打开Word文档,打开【密码】,输入打开文件所需的密码,单击【确定】输入修改的密码,单击【确定】 破解word密码 (1)安装Advanced Office Password Recovery软件,安装完成后打开需要破解的word 文档,进行暴力破解,结果如图所示: 实验三、使用WinRAR加密解密文件

一.实验目的:加密文件,保证文件的安全性。 二.实验步骤: 1、在需要加密的文件夹上右击,选中【添加到压缩文件】打开【压缩文件名和参数】 2、选中【压缩文件格式】组合框中的【RAR】并在【压缩选项】中选中【压缩后删除源文件】然后切换到【高级】,输入密码,确认密码。 3、关闭对话框,单击确定,压缩完成后,双击压缩文件,系统打开【输入密码对话框】 破解WinRAR加密的文件 (1)安装Advanced RAR Password Recovery软件,打开WinRAR加密文件,进行暴力破解,获得密码。结果如图:

DES加密算法实验报告

苏州科技学院 实验报告 学生姓名:杨刘涛学号:1220126117 指导教师:陶滔 刘学书1220126114 实验地点:计算机学院大楼东309 实验时间:2015-04-20 一、实验室名称:软件实验室 二、实验项目名称:DES加解密算法实现 三、实验学时:4学时 四、实验原理: DES算法由加密、子密钥和解密的生成三部分组成。现将DES算法介绍如下。1.加密 DES算法处理的数据对象是一组64比特的明文串。设该明文串为m=m1m2…m64 (mi=0或1)。明文串经过64比特的密钥K来加密,最后生成长度为64比特的密文E。其加密过程图示如下:

图2-1:DES算法加密过程 对DES算法加密过程图示的说明如下: 待加密的64比特明文串m,经过IP置换(初始置换)后,得到的比特串的下标列表如下: 表2-1:得到的比特串的下标列表

该比特串被分为32位的L0和32位的R0两部分。R0子密钥K1(子密钥的生成将在后面讲)经过变换f(R0,K1)(f变换将在下面讲)输出32位的比特串 f1,f1与L0做不进位的二进制加法运算。运算规则为: f1与L0做不进位的二进制加法运算后的结果赋给R1,R0则原封不动的赋给L1。L1与R0又做与以上完全相同的运算,生成L2,R2……一共经过16次运算。最后生成R16和L16。其中R16为L15与f(R15,K16)做不进位二进制加法运算的结果,L16是R15的直接赋值。 R16与L16合并成64位的比特串。值得注意的是R16一定要排在L16前面。R16与L16合并后成的比特串,经过置换IP-1(终结置换)后所得比特串的下标列表如下: 表2-2:置换后所得比特串的下标列表 经过置换IP-1后生成的比特串就是密文e。 变换f(Ri-1,Ki): 它的功能是将32比特的输入再转化为32比特的输出。其过程如图2-2所示:

DES加密与解密C实现+实验报告

DES加密与解密算法 课程名称:工程实践 学生姓名: xxxx 学生学号: xxxx 专业班级: xxxx 任课教师: xxxx 论文提交日期: xxxx

DES加密与解密算法 摘要 本世纪五十年代以来,密码学研究领域出现了最具代表性的两大成就。其中之一就是1971年美国学者塔奇曼(Tuchman)和麦耶(Meyer)根据信息论创始人香农(Shannon)提出的“多重加密有效性理论”创立的,后于1977年由美国国家标准局颁布的数据加密标准。 DES密码实际上是Lucifer密码的进一步发展。它是一种采用传统加密方法的区组密码。它的算法是对称的,既可用于加密又可用于解密。 1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES枣Data Encryption Standard)。 目前在这里,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。 关键词:DES算法,加密,解密

Abstract This century since fifty time, cryptography research field is the most representative of the two Achievement. One was the 1971 USA scholar Tuchman (Tuchman) and Meyer (Meyer) based on information theory founder Shannon (Shannon) proposed "multiple encryption effectiveness theory" was founded, in 1977 after the National Bureau of standards promulgated by the America data encryption standard.The DES password is actually a further development of the Lucifer password. It is a traditional encryption method of block cipher. The algorithm is symmetric, which can be used for encryption and decryption can be used. In 1977 January, the government promulgated American: adopted IBM design as a non official data confidential data encryption standard (DES - Data Encryption Standard). At present here, along with three gold project especially golden card project startup, DES algorithm in POS, ATM, magnetic card and intelligent card (IC card), gas station, highway toll station and other fields are widely used, so as to realize the security of key data encryption transmission, such as credit card holders PIN, IC card and POS mutual authentication, financial transaction data package of MAC check and so on, are used in DES algorithm. Keywords: DES algorithm, encryption, decryption

古典加密实验报告

古典密码算法 一、实验目的 学习常见的古典密码学算法,通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。 二、实验要求 分析替代密码算法和置换密码算法的功能需求,详细设计实现替代密码算法和置换密码算法的数据结构和流程,给出测试用例和测试步骤,得出测试和结论。替代密码算法和置换密码算法的实现程序必须提供加密和解密两个接口:int encrypt()和int decrypt()。当加密或者解密成功时返回CRYPT_OK,失败时返回CRYPT_ERROR。 三、实验原理 古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍两种算法:替代密码和置换密码。 1.替代密码的原理是使用替代法进行加密,就是将明文由其它的字母、数字或符合所代替后形成密文。这里每个明文字母对应的密文字母可能是一个,也可能是多个。接收者对密文进行逆向替换即可得到明文。 2.置换密码算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。置换密码有时又称为换位密码。 我实验过程中替代密码是单表替换,用字母的下一个字母代替:for(j = 0; j < i; j++)

{ if(96 < Mingwen[j]&&Mingwen[j] < 123) { Miwen[j] = 'a' + (Mingwen[j] - 'a' + 1) % 26; } else { Miwen[j] = 'A' + (Mingwen[j] - 'A' + 1) % 26; } } 置换加密主要是对密钥进行整理,还有就是动态分配二维数组,将明文和密文填充置的过程,换密码关键代码如下: for(a = 0; a < k; a++) { for(b = 0; b < hang; b++) { Miwen[i] = p[b][ord[j]]; i++; } j++; } for(a = 0; a < 26; a++) { for(b = 0; b < k; b++) { if(key1[b] == alphatable[a]) { ord[b] = ind++; } } } 具体加密见下图:

加密解密程序实验报告

程序设计实践 加密解密程序实验报告 课题概述 1.1课题目标和主要内容: 利用MFC类或者win32编写windows程序,实现加密解密的功能。 1.2系统的主要功能: 1.实现用户界面友好的操作。 2.具有对称编码体制,可以实现: i.凯撒密码:能够自定义密钥,自由输入明文,进行加密、解密,在对话框中返回加密和 解密后的内容。

ii.置换密码:能够自定义密钥,自由输入明文,经矩阵变换进行加密、解密,在对话框中返回加密和解密后的内容 iii.对称加密DES:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序加密,解密结果。 3.具有非对称编码体制: i. RSA加密解密:随机产生p,q,经检验是否互质,若不互质接着产生两个随机数,直 到二者互质为止。自动生成p,q,N及加密解密的密钥,可以自由输入明文,返回加密、 解密的内容。 ii. MD5消息摘要计算:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序的加密结果。 4.信息隐藏技术: 用LSB在图片(bmp格式,任意位置的图片)中写入信息,读取信息并显示出来,可 以擦除信息。可以自定义密钥。 5. AES加密解密:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序 加密,解密结果。 6. 以上的所有对文字加密解密的方法(除LSB以外其余所有方法),都可以用于文件加 密,解密,并能够及时保存加密,解密的信息到一个TXT文档,可以存在用户想存放 的地方。 7.更多: 链接了一个可加密解密,功能更为齐全的网站,若是上述方法不能满足用户需求, 可以在程序运行的窗口中点击相应按钮,在联网的条件下进行在线加密解密。 一、系统设计 2.1系统总体框架: 2.2主要的层次逻辑为:

凯撒加密解密实验报告

《C语言课程设计》任务书 所属学期:10-11-2 下达时间:2011年8月28日 完成班级: D软件101 【设计目的】 本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《C语言程序设计》课程后进行的一次全面的综合练习。本课程设计的目的和任务:(1)巩固和加深学生对C语言的基本知识的理解和掌握;(2)掌握C语言编程和程序调试的基本技能;(3)利用C语言进行简单软件设计的基本思路和方法;(4)提高运用C语言解决实际问题的能力;(5)掌握书写程序设计说明文档的能力。 【设计内容与任务】 每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。 1、以本班同学的具体数据为背景,设计一个本班同学通讯录。 实现功能: 1) 通讯录编辑(添加、删除)。 2) 按不同的项进行查找。 3) 对已存在的通讯录按不同的项排序。 4) 将通讯录写入文件 5) 从文件读入通讯录 备注:通讯录至少应该有以下数据项:姓名,地址,电话,邮编,E-mail,QQ。 2、设计一个学生成绩排名系统,该系统的主要功能如下: 1) 具备对成绩的管理功能(添加、删除、排序) 2) 具备对成绩的统计功能(最高分,最低分,平均分,及格率等) 3) 具备按学号、姓名、或课程名查询成绩的功能。 备注:成绩记录以下信息:班级,学号,姓名,课程名,成绩(百分制)。可以用能表示学生成绩的结构体数组存储数据。 3、设计一个文件加密/解密程序,主要功能是支持简单的替换加密/解密,支持凯撒加密法(参见百度百科词条:凯撒加密法https://www.sodocs.net/doc/151444361.html,/view/4107346.htm)和ROT13加密两种加密方法。 4、设计一个简单的文件压缩/解压缩程序,例如:未压缩前的字符为"aaaccccddddd666666",则压缩以后的字符为:"3a4c5d66"。压缩文件时需要输出压缩比,如20%。 5、设计一个万年历程序。主要功能是能够输出任意年份或月份的日历,程序的输出的月

文件的移位加密解密实验报告

文件的移位加密与解密 一目的 将某一已知文件的内容(仅限于英文字母)以字符形式读出,根据密钥(用户从键盘输入)将对应字符进行移位操作即可,解密时移动相反,使文件恢复原来的字母。 二需求分析 将某一已知文件的内容(仅限于英文字母)以字符形式读出,根据密钥(用户从键盘输入)将对应字符进行移位操作即可,解密时移动相反。 加密:用户选择功能(运行后键盘输入1进行选择),从键盘输入一个任意整数密钥,然后对已知文件“abc.txt”进行加密。加密后屏幕显示加密后文件内容并且文件内容改变。成为加密文件。 解密:通过选择功能(运行后键盘输入2进行选择)对加密后的文件进行解密,输入密钥后能显示出解密后文件内容并且文件变为解密的文件。 通过加密解密可以在文件内容与乱码之间来回转换,使文件内容更安全。 在D盘中建立abc.txt文件并在其中输入字符串abcdef,运行程序,选择1对文件进行加密,输入密钥1,文件abc.txt会变为bcdefg。 三概要设计 本程序有一个模块: main() { 定义整数选择,密钥; 定义字符型数组保存源文件的内容,保存改变后文件的内容;

定义i=0,用来初始化数组; 定义文件指针1,2 第一个只读打开文件,第二个只写打开文件把更改后的文件放入已知文件中。 没有其他函数。 } 四详细设计 主程序流程图 定义最大数组,以及所使用的函数的头文件名

#include #define M 200 #include 文件指针,以及全局变量 int password,choose; char c,yuan[M]; int i=0; FILE *fp,*fp1; 对文件的打开,并对所需功能进行选择。 fp=fopen("D:\\abc.txt","r"); if(fp==NULL) printf("the document can't be open!\n"); printf("please choose the function\n"); printf("1:encrypt 2:decript \n"); scanf("%d",&choose); if(choose!=1&&choose!=2) printf("please input a right number!\n"); system("pause"); 对文件进行加密或者解密处理,并把处理结果输出在屏幕上。while((c=fgetc(fp))!=EOF)

DES文件加密实验报告

DES文件加密实验报告 一、DES算法简介 DES是Data Encryption Standard(数据加密标准)的缩写。它是由IBM公司研制的一种加密算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准,二十年来,它一直活跃在国际保密通信的舞台上,扮演了十分重要的角色。 DES是一个分组加密算法,他以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密匙长度是56位(因为每个第8 位都用作奇偶校验),密匙可以是任意的56位的数,而且可以任意时候改变。其中有极少量的数被认为是弱密匙,但是很容易避开他们。所以保密性依赖于密钥。 二、用C#实现DES文件加密 指定文件,输入密钥来加密和解密数据。DESCryptoServiceProvider基于对称加密算法。Symmetricencryption 需要一个密钥和一个初始化向量(IV) 加密请。要解密的数据,必须具有相同的密钥和IV。使用的加密提供程序来获取encryptingobject (CreateEncryptor) 创建CryptoStream类的一个实例,现有输出文件流对象的构造函数的一部分。 要解密文件,执行以下步骤:创建一个方法,并命名该按钮DecryptFile.解密过程是类似于theencryption 进程,但是,DecryptFile过程从EncryptFile过程的两个主要区别。而不是CreateEncryptor使用CreateDecryptor来创建CryptoStream对象,用于指定如何使用该对象。解密的文本写入目标文件,CryptoStream对象是现在而不是目标流的来源。 三、运行环境 可将DES文件加解密软件的可执行.exe文件直接在xp,win7等系统上运行。 四、实验结果 1、开始界面 2、打开要加密文件、输入密钥

AES——密码学实验报告

实验报告 【实验名称】AES加密解密实验 姓名:学号:班级:日期:10月20日 【实验目的】 1.掌握AES算法的基本原理 2.了解AES算法的详细步骤 【实验环境】 1.本试验需要密码教学实验系统的支持 2.操作系统为Windows 2000或者Windows XP 【实验内容】 1.掌握AES算法的原理及过程 2.完成AES密钥扩展运算 3.完成AES数据加密运算 【实验步骤】 1.打开“AES理论学习”,掌握DES算法的加解密原理; 2.打开“AES算法流程”,开始DES单步加密实验,如图10-1; 3.选择密钥输入为ASCII码或十六进制码模式,输入密钥;若为ASCII码模式,则输入 8个字符的ASCII码;若为十六进制码模式,则输入16个字符的十六进制码(0~9,a~f,A~F); 4.点击“字节矩阵”按钮,将输入的密钥转化为密钥字节矩阵,从左至右每一列依次 为W0, W1, W2, W3; 5.依次点击“RotWord”、“SubWord”、“轮常量异或”,对W3依次进行“循环移 位”、“S盒”、“轮常量异或”操作并与W0异或得到W4,; 6.点击“异或”按钮,使得W1与W4进行异或得到W5 7.点击“生成W6和W7”按钮,生成W6和W7 8.点击“生成所有轮密钥”按钮,生成1~10轮轮密钥

9.进入第二部分——加密,选择加密输入为ASCII码或十六进制码模式,输入明文;若 为ASCII码模式,则输入8个字符的ASCII码;若为十六进制码模式,则输入16个字符的十六进制码(0~9,a~f,A~F); 10.点击“字节矩阵”按钮,将输入明文转化为明文字节矩阵; 11.点击“AddRoundKey”按钮,使明文字节矩阵与密文字节矩阵进行逐比特异或; 12.接下来进行第一轮操作,依次点击“SubBytes”、“ShiftRows”、“MixColumns”、

数据加密实验报告

加密与隐藏实验报告 姓名王珊学号 09040436011 专业计算机系信管专业班级09级 实验项目名称数据的加密与隐藏 指导教师及职称赵欣 开课学期 2011 至 2012 学年 1 学期上课时间 2011 年 9 月 1 日 实验项目:数据的加密与隐藏

一、实验环境 Pentiuum III、600 MHz以上CPU , 128M 以上内存,10G 以上硬盘,安装windows 98 以上操作系统,加密与隐藏软件EsayCode Boy Plus 。EasyCode Boy Plus ,界面如图1-1所示。 图1-1 EasyCode Boy Plus界面 二、实验目的及要求 一、实验目的 (1)提高对加密与解密原理的认识; (2)提高对信息隐藏原理的认识; (3)学会使用加密与隐藏软件。 要求: 1.熟悉实验环境,掌握相关数据加密解密的使用方法; 2.掌握数据隐藏和恢复的方法; 3.整理出思路清晰的实验报告并加以总结; 4.提交实验报告。 三、实验仪器设备 Windows2000/XP +ECBoy文件加密器 四、实验内容及步骤 4.1 加密文件 任意编写一个 Word 文档,如 my.doc,如下图所示

→选中要加密的文件(如 my. doc )→在密码输人框中输人密码→“开始加密”如图 打开加密文件,如 my.doc ,看到的将是乱码如下

说明:实际上EasyCode Boy Plus可以加密任何类型的文件,并对文件的每个比特单元加密。如果需要加密一个文件夹,可以单击“批量添加文件”,程序将加密文件夹中的所有文件;如果被加密的文件较大,可以选中“启动快速加密”选项;如果只对文件名加密,可以选中“加密文件名”选项,这时加密后的文件名会改变,无法打开或执行。 4.2 解密文件 在 Esaycode Boy Plus 窗口→选中“解密”→选择被加密的文件→在密码输人框中输人密码→“开始解密”→打开解密的文件,如 my.doc,可以看到文件的内容已经被解密或 文件已经可以运行。

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];

信息安全概论中的DES加密解密算法的用C++实现,附上实验报告

网络与信息安全Introduction to Network and Security ——DES 加密解密算法的C++实现 姓名: 学号: 学院: 2010年10月

一、DES算法的实现 1.DES简介 本世纪五十年代以来,密码学研究领域出现了最具代表性的两大成就。其中之一就是1971年美国学者塔奇曼(Tuchman)和麦耶(Meyer)根据信息论创始人香农(Shannon)提出的“多重加密有效性理论”创立的,后于1977年由美国国家标准局颁布的数据加密标准。 DES密码实际上是Lucifer密码的进一步发展。它是一种采用传统加密方法的区组密码。它的算法是对称的,既可用于加密又可用于解密。 美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告。加密算法要达到的目的通常称为DES密码算法要求主要为以下四点: 提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改;具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握DES密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础实现经济,运行有效,并且适用于多种完全不同的应用。 1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES枣Data Encryption Standard)。 目前在这里,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC 校验等,均用到DES算法。 DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES 的工作方式,有两种:加密或解密。 DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。 通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。 2.DES算法详述 DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其功能是把输入的64位数据块按位重新组合,并把输出分为L0 、R0两部分,每部分各长32位,其置换规则见下表: 58,50,12,34,26,18,10,2,60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,

实验二 使用PGP进行加解密实验报告

“使用PGP进行加解密”实验报告 班级: 姓名: 实验日期: 实验时间:至 实验地点:院楼435 华南农业大学信息学院

一.实验目的 通过使用PGP软件对文件进行加密和解密,加深对加密和解密技术的认识。二.实验内容 1合作双方分别在自己机器上的PGP软件中生成密钥对。 2双方分别导出自己的公钥并传给对方(可通过磁盘拷贝,网络拷贝或电子邮件传输)。 3双方分别将对方传来的公钥导入到自己的PGP软件中,并对此公钥进行签名确认信任此公钥。 4 双方分别加密一个文件。用记事本程序打开加密后的文件,观察文件的内容。 5双方分别将加密后的文件传给对方。 6双方分别用PGP软件解密收到的加密文件。 三.实验设备(2人一组) PC机两台,安装有以下软件: 1 Windows 2000 Professional操作系统 2 PGP软件 四. 实验记录 记录实验的每一步操作过程,配置参数,实验结果,操作过程中出现的问题及及解决方法。 (一)生成新的密钥对 (1)点击“开始”-> “程序”->“PGP”->“PGPKeys” (2)在弹出的窗口的菜单栏中,选择“keys”->“New Key…” (3)在弹出的PGP Key Generation Wizard(PGP密钥生成向导)窗口中,点“下一步”按钮,进入Name and Email Assignment(用户名和电子邮件分配)界面,在Full name处输入用户名,Email address处输入用户所对应的电子邮件地址,完成后点“下一步”按钮。 (4)在Passphrase Assignment(密码设定)界面,在Passphrase处输入你需要的密码,Confirmation(确认)处再输入一次,密码长度必须大于8位。完成后点“下一步”按钮。进入Key Generation Progress(密钥生成进程),等待主密钥(Key)和次密钥(Subkey)生成完毕(出现Done)。点击“下一步”按钮,进入Completing the PGP Key Generation Wizard (完成该PGP密钥生成向导)再点“完成”按钮,你的密钥对就创建好了。

加解密算法实验报告

实验加/解密算法 实验日期:__年__月_日实验成绩:___________ 1.实验目的: (1)数据机密性; (2)数据完整性; (3)不可抵赖性 2.实验环境(设备、仪器、网络): (1)虚拟机 (2)加密工具 (3)Windows系统环境 3.实验内容(实验方案、实验步骤、测量数据及处理等): 3.1实验方案 加密方和解密方利用RSA加密算法分别生成一对公钥和私钥,并告知对方自己的公钥。 加密方实验流程如图3-1所示: 图3-1 将加密后的明文和签名发送给解密方。 解密方实验流程如图3-2所示:

图3-2 将明文同样进行hash运算得出摘要,与验证签名后得出的摘要相比较,如果相同则可以证明明文没有被破坏或改变,同时也可使确定是加密方发送的信息。 3.2实验过程 加密方 (1)加密方通过RSA算法得出公钥(e,n)=(101,253),私钥(d,n)=(61,253); (2)编辑明文为we are in xinjiang,and you? (3)在加密工具的环境中利用解密方的公钥对明文进行加密,如图3-3所示: 图3-3 (4)在加密工具中利用MD5对明文进行hash运算,如图3-4所示:

图3-4 (5)用加密方的私钥对生成的摘要进行签名,如图3-5所示: 图3-5 (6)将签名与密文发送给解密方。

解密方 (1)通过RSA算法得出公钥(e,n)=(1003,2173),私钥(d,n)=(1827,2173) (2)利用解密方的私钥对密文解密,如图3-6所示: 图3-6 (3)验证签名,将加密方发送的签名用加密方的公钥解密,如图3-7所示:

实验三 DES加解密程序设计与实现

实验三DES加解密程序设计与实现 一、实验目的 ?理解DES加密与解密的程序设计算法思想。 ?编写DES加密与解密程序,实现对明文的加密与解密,加深对数据加密 与解密的理解,掌握DES加密算法思想,提高网络安全的编程能力。 二、实验时数:4小时 三、实验环境 ?Windows操作系统、TC、VC、Java等编程软件。 四、实验要求 ?了解DES算法的优缺点及应用场合; ?理解并掌握DES算法的原理; ?编写DES加解密算法程序; ?程序关键语句后应加注释; 五、实验内容及步骤 1)实验内容 ?掌握DES算法; ?编写DES算法。 2)实验步骤 利用编程语言实现DES加解密算法。 一、编程:包含的功能函数有: static void DES(char Out[8], char In[8], const SUBKEY_P pskey, bool Type);//标准DES 加/解密 static void SETKEY(const char* Key, int len);// 设置密钥 static void Set_SubKey(SUBKEY_P pskey, const char Key[8]);// 设置子密钥static void F_FUNCTION(bool In[32], const bool Ki[48]);// f 函数完成扩展置换、S-盒代替和P 盒置换 static void S_BOXF(bool Out[32], const bool In[48]);// S-盒代替函数 static void TRANSFORM(bool *Out, bool *In, const char *Table, int len);// 变换函数 static void XOR(bool *InA, const bool *InB, int len);//异或函数 static void CYCLELEFT(bool *In, int len, int loop);// 循环左移函数 static void ByteToBit(bool *Out, const char *In, int bits);// 字节组转换成位组函数 static void BitToByte(char *Out, const bool *In, int bits);// 位组转换成字节组函数 二、调试 三、运行结果

相关主题