密码学实验报告AESRSA

密码学实验报告AESRSA
密码学实验报告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}等。在行X 和列Y 的字节值是{xy}。

(2) 把S 盒中的每个字节映射为它在有限域GF(k 2)中的逆。GF 代表伽罗瓦域,GF(82)

由一组从0x00到0xff 的256个值组成,加上加法和乘法。

)

1(]

[2)2(3488++++=

x x x x X Z GF 。{00}被映射为它自身{00}。

(3) 把S 盒中的每个字节记成),,,,,,,,(012345678b b b b b b b b b 。对S 盒中每个字节的每位

做如下变换:

i i i i i i c b b b b b i b ⊕⊕⊕⊕⊕='++++8mod )7(8mod )6(8mod )5(8mod )4(

上式中i c 是指值为{63}字节C 第i 位,即)01100011(),,,,,,,,(012345678=c c c c c c c c c 。符号(')表示更新后的变量的值。AES 用以下的矩阵方式描述了这个变换:

??

?

??

?

?

?

?

?

???

?

????????????+????????????????????????????????????????

????????????=??????????????????????????0110001111111000011111000011111000011111100011111100011111100011111100017654321076543210b b b b b b b b b b b b b b b b

最后完成的效果如图:

3.3、行移位(ShiftRows)

一.State的第一行字节保持不变,State的第二行字节循环左移一个字节,State 的第三行字节循环左移两个字节,State的第四行循环左移三个字节。

行移位左偏移量:

变化如图2所示。

3.4、列混合(MixColumn)

一.列混合变换是一个替代操作,是AES 最具技巧性的部分。它只在AES 的第0,1,…,Nr 一1轮中使用,在第N r 轮中不使用该变换。乘积矩阵中的每个元素都是一行和一列对应元素的乘积之和。在MixColumns 变换中,乘法和加法都是定义在GF(82)上的。State 的每一列 (j i b ,) 1=0,…,3;J=0,…,b L 被理解为 GF(82)上的多项式,该多项式与常数多项式012233)(a x a x a x a x a +++=相乘并模1)(4+=x x M 约化。

这个运算需要做GF(82)上的乘法。但由于所乘的因子是三个固定的元素02、03、01,所以这些乘法运算仍然是比较简单的(注意到乘法运算所使用的模多项式为

1)(348++++=x x x x x m )。设一个字节为b=(b7b6b5b4b3b2b1b0),则

b ב01’=b;

b ב02’=(b6b5b4b3b2b1b00)+(000b7b70b7b7); b ב03’=bב01’+b×’02’。

(请注意,加法为取模2的加法,即逐比特异或) 写成矩阵形式为:

00112233b a 02

030101b a 01020301b 01010203a 03

01

01

02b a ??????????????????=??????????????

????

最后完成的效果如图:

3.5、轮密钥加(AddRoundKey )

Add RoundKey 称为轮密钥加变换,128位的State 按位与 128位的密钥XOR :

),,,(),,,(),,,(321032103210j j j j j j j j j j j j k k k k b b b b b b b b ⊕←对 j=0,… ,L-1 轮密钥加变换很

简单,却影响了 State 中的每一位。密钥扩展的复杂性和 AES 的其他阶段运算的复杂性,却确保了该算法的安全性。

最后完成的效果如图:

3.6.逆字节替换

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

3.7.逆行移位InvShiftRow

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

3.8.逆列混淆

3.9加密与解密模式

电子密码本ECB模式:

ECB模式是最古老,最简单的模式,将加密的数据分成若干组,每组的大小跟加密密钥长度相同;然后每组都用相同的密钥加密,比如DES算法,如果最后一个分组长度不够64位,要补齐64位;定义: Enc(X,Y)是加密函数Dec(X,Y)是解密函数Ci ( i = 0,1…n)是密文块,大小为64bit; XOR(X,Y)是异或运算;IV是初始向量(一般为64位)ECB加密算法可表示为:

C0 = Enc(Key, XOR(IV, P0)

Ci = Enc(Key, XOR(Ci-1, Pi)

ECB解密算法可以表示为:

P0 = XOR(IV, Dec(Key, C0))

Pi = XOR(Ci-1, Dec(Key,Ci))

算法特点:每次加密的密文长度为64位(8个字节); 当相同的明文使用相同的密钥和初始向量的时候CBC模式总是产生相同的密文; 密文块要依赖以前的操作结果,所以,密文块不能进行重新排列; 可以使用不同的初始化向量来避免相同的明文产生相同的密文,一定程度上抵抗字典攻击; 一个错误发生以后,当前和以后的密文都会被影响;

四、实验方法与步骤

4.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++)

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

}

4.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;

}

4.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;

}

4.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;

}

4.5密钥扩展

通过生成器产生Nr+1个轮密钥,每个轮密钥由Nb个字组成,共有Nb(Nr+1)个字。在加密过程中,需要Nr+1个轮密钥,需要构造4(Nr+1)个32位字。首先将输入的4个字节直接复制到扩展密钥数组的前4个字中,得到W[0],W[1],W[2],W[3];然后每次用4个字填充扩展密钥数余下的部分。

//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++) p rintf("\t\t%02x ",w[i][j]);

printf("\n");}

printf("\n");

4.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;

}

4.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;

}

4.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;

}

4.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,0x 37,0x07,0x34};

key[16]={0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,0xab,0xf7,0x15,0x88,0x09,0xcf,0x4 f,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);

}

4.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,0x 4f,0x3c};

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

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

五、实验结果与数据处理

实验结果截图:

六、实验心得

这次课程设计我最大的收获就是凡事都要自己动手去做,有些事情自己不做,什么都不会,有畏惧感,胆怯,始终把事情放在那,就形成恶性循环,这样子一直都做不来,一直都不会有进步,所以不管什么事情都要亲自去尝试一下,难易程度自己感知,不要听信他人的谣言,或者误导。

还有就是,做代码的时候查阅了相关的书籍,很杂很乱,这对于选择有用的材料,有价值的材料进行使用,会提高效率,最开始各种涉猎,很多,但是实用的却没有多少,白白耽误了很多时间。我觉得还是首先了解全局,了解总体,高屋建瓴,做好准备工作,写好报告,把每个过程搞懂了,才能动手去写代码,连基本的理论都不懂,就去操作,实在是慢,当然在了解的基础上,也要去实践,去检验自己的做法是否是对的,不能光搞理论,计算机是一个动手就得答案的科学,多检验,多算,多观察。这样子影响更深,更不会忘,一辈子的经验,自己动手得到的答案,远比查阅资料了解来的有意义,有效果。

在写代码的时候参考了一些参考资料,发现一些牛人写的代码简介,精炼,确实让人敬佩,我用很多行代码实现的功能,别人两三句循环就解决了,主要是平时没怎么编写代码,没有经验,还是要多写代码,多领悟,才能有他们的成就。而且我简介的代码都是很好的数学算法,我学的数学没怎么用在这个上面,不能直接用最低级的算法,最普通的算法,这样子永远不能简化,要简化就要用一些数学算法,下标改变啊,循环啊啥的这些可以实现意想不到的效果,实现功能和简介的双重母的。多实践!

[综合实验二] RSA加密算法的实现

一、实验目的及要求

通过编程实现RSA的加密和解密过程,加深对公钥(非对称)密码算法的认识

二、所用仪器、设备

计算机、Visual C#软件。

三、实验原理

1.RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。 RSA

是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。

2.RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数(大于 100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。

3.密钥对的产生。选择两个大素数,p 和q 。计算:n = p * q,然后随机选择加密密钥e(PS:最常用的e值有3,17和65537,微软就是使用的65537,采用3个中的任何一个都不存在安全问题),要求 e 和 ( p - 1 ) * ( q - 1 ) 互质。最后,利用Euclid 算法计算解密密钥d, 满足e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )其中n和d也要互质。数e和n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任何人知道。

4.加密信息 m(二进制表示)时,首先把m分成等长数据块 m1 ,m2,..., mi ,块长s,其中 2^s <= n, s 尽可能的大。对应的密文是:

ci = mi^e ( mod n ) ( a )

解密时作如下计算:

mi = ci^d ( mod n ) ( b )

5.从RSA的原理来看,公钥加密私钥解密和私钥加密公钥解密应该是等价的,在某些情况下,比如共享软件加密,我们需要用私钥加密注册码或注册文件,发给用户,用户用公钥解密注册码或注册文件进行合法性验证。

四、实验方法与步骤

.NET提供常用的加密算法类,支持RSA的类是RSACryptoServiceProvider(命名空间:System.Security.Cryptography),但只支持公钥加密,私钥解密。RSACryptoServiceProvider类包括:Modulus、Exponent、P、Q、DP、DQ、InverseQ、D 等8个属性,其中Modulus和Exponent就是公钥,Modulus和D就是私钥,RSACryptoServiceProvider类提供导出公钥的方法,也提供导出私钥的方法,导出的私钥包含上面8个属性。

五、实验结果与数据处理

主要代码如下:

六、实验心得

通过这次的实验,了解了非对称密码算法RSA,会运用一些现成的算法进行编程,对一些比较复杂的算法开始基本认识并深刻的掌握。在以后所涉及这方面的知识将会有全新的了解和掌握通过这次课程设计,我对RSA加密体制有了更进一步的了解。遇到的主要问题是如何将明文按照比特分组并对其实现RSA加密,以及对大素数的处理。最终大素数的处理得以实现,但明文分组并没有找到合适的方法,这就要求我在课程设计后去学习怎样为明文分组机密。要想学好现代密码学不仅要学习好密码学相关知识,还要有很好的

数学基础,还有很强的编程能力,课程设计时对学生个人综合能力的检验。任何知识和技术都不是孤立的。要学习好密码学要牵扯到线性代数,离散数学,概率统计等数学知识,为了验证加密解密算法的正确性,还要动手编制程序,这就要求学生要对至少一种编程技术有所熟知。

现代密码学实验报告

现代密码学 实验报告 学生姓名 学号 专业班级计算机科学与技术指导教师段桂华 学院信息科学与工程学院完成时间2016年4月

实验一密码算法实验 [实验目的] 1.掌握密码学中经典的对称密码算法AES、RC4的算法原理。 2.掌握AES、RC4的算法流程和实现方法。 [实验预备] 1.AES算法的基本原理和特点。 2.流密码RC4的密钥流生成以及S盒初始化过程。 [实验内容] 1. 分析AES、RC4的实现过程。 2. 用程序设计语言将算法过程编程实现。 3. 完成字符串数据的加密运算和解密运算 输入十六进制明文:11223344556677889900AABBCCDDEEFF 输入十六进制密钥:13579BDF02468ACE1234567890ABCDEF [实验步骤] 1. 预习AES、RC4算法。 2. 写出算法流程,用程序设计语言将算法过程编程实现。 3. 输入指定的明文、密钥进行实验,验证结果。 4. 自己选择不同的输入,记录输出结果。 写出所编写程序的流程图和运行界面、运行结果。 一、AES算法 1、AES算法简介 AES 是一种可用来保护电子数据的新型加密算法。特别是,AES 是可以使用128、192 和 256 位密钥的迭代式对称密钥块密码,并且可以对 128 位(16 个字节)的数据块进行加密和解密。与使用密钥对的公钥密码不同的是,对称密钥密码使用同一个密钥来对数据进行加密和解密。由块密码返回的加密数据与输入数据具有相同的位数。迭代式密码使用循环结构来针对输入数据反复执行排列和置换运算。 2、算法实现及流程 以加密函数为例,如下所示,首先对密钥进行预处理密钥扩展,然后明文进行Nr(Nr与密钥长度有关)次迭代运算,包括字节替换SubBytes、移位行运算ShiftRows、混合列运算MixColumns、以及轮秘钥加密AddRoundKey。

人机交互技术实验五熟悉设计管理和游戏界面设计

重庆邮电大学移通学院学生实验报告 实验名称:熟悉设计管理和游戏界面设计 专业班级:数字媒体技术 02141401 姓名:罗钧 学号: 2014210xxx 实验日期:

实验五:熟悉设计管理和游戏界面设计 一、实验目的 (1)了解和熟悉人机界面设计过程管理的相关知识; (2)了解和评价游戏软件的人机交互设计,提高自己的评价能力,提高自己对设计水平的。 二、工具/准备工作 需要准备一台带有浏览器,能够访问因特网的计算机。 三、实验内容与步骤 1.概念理解 (1)成功的用户界面开发有4个支柱,它们能够帮助用户界面架构师将好的思想转化为成功的系统。经验表明,每个支柱都能在此过程中产生数量级的加速作用,并能促进建立优秀的系统。 请简单描述这4个支柱。 用户界面需求:软件项目的成败经常取决于所有用户和实现者之间理解的精确性和完整性。如果没有适当的需求定义,那就既不能确定正在解决什么问题,也不会知道何时能够完成。拟定用户界面需求是整个需求开发和管理过程的一部分,系统需求(硬件、软件、系统性能及可靠性等)必须清楚的加以陈述,任何处理用户界面的需求(输入/输出设备、功能、界面及用户范围等)都必须指明并达成共识。一个确定用户需求的成功方法是通过用户观察,监视正在行动的真实用户的背景和环境。 指南文档和过程:指南文档应考虑以下几方面。 1.词、图标和图形 2.屏幕布局问题 3.输入与输出设备 4.动作序列 5.培训 用户界面软件工具:设计交互系统的困难之一,是客户和用户可能对新系统并没有一个清晰的想法。由于在很多情况下交互系统都是新奇的,用户可能认识不到设计决策的用意。虽然打印出来的文稿对初步体验是有帮助的,但具有活动键盘和鼠标的屏幕展示却更为真实。菜单系统的原型可能用一两条活动路径来代替为最终系统预想的数千条路径。 专家评审和可用性测试:现在,网站的设计人员认识到,在将系统交付给客户使用之前,必须对组件进行很多小的和一些大的初步试验。除了各种专家评审方法外,与目标用户一起进行的测试、调查和自动化分析工具被证明是有价值的。其过程依可用性研究的目标、预期用户数量、错误和危害程度和投资规模而变化很大。 (2)请简单描述用户界面设计所涉及的法律问题 ①隐私问题 ②安全性和可靠性

1密码学-DES实验报告

南京信息工程大学实验(实习)报告实验(实习)名称对称密码实验(实习)日期得分指导教师 系计软院专业网络工程年2011 班次 1 姓名学号20111346026 一.实验目的 1.理解对称加密算法的原理和特点 2.理解DES算法的加密原理 二.实验内容 第一阶段:初始置换IP。在第一轮迭代之前,需要加密的64位明文首先通过初始置换IP 的作用,对输入分组实施置换。最后,按照置换顺序,DES将64位的置换结果分为左右两部分,第1位到第32位记为L0,第33位到第64位记为R0。 第二阶段:16次迭代变换。DES采用了典型的Feistel结构,是一个乘积结构的迭代密码算法。其算法的核心是算法所规定的16次迭代变换。DES算法的16才迭代变换具有相同的结构,每一次迭代变换都以前一次迭代变换的结果和用户密钥扩展得到的子密钥Ki作为输入;每一次迭代变换只变换了一半数据,它们将输入数据的右半部分经过函数f后将其输出,与输入数据的左半部分进行异或运算,并将得到的结果作为新的有半部分,原来的有半部分变成了新的左半部分。用下面的规则来表示这一过程(假设第i次迭代所得到的结果为LiRi): Li = Ri-1; Ri = Li-1⊕f(Ri-1,Ki);在最后一轮左与右半部分并未变换,而是直接将R16 L16并在一起作为未置换的输入。 第三阶段:逆(初始)置换。他是初始置换IP的逆置换,记为IP-1。在对16次迭代的结果(R16 L16)再使用逆置换IP-1后,得到的结果即可作为DES加密的密文Y输出,即Y = IP-1 (R16 L16) 三.流程图&原理图

流程图

DES原理图

密码学实验报告

密码学实验报告 学院:计算机科学与技术 班级: 学号: 姓名: 指导老师:

密码学 实验日志 实验题目: DES (或AES )分组密码 实验目的: 熟悉分组密码加解密算法的基本原理,加深对所提供的部分源程序的理解; 分组密码将明文分成一组一组,在密钥的控制下,经过加密变换生成一组一组的密文。具体而言,分组密码就是将明文消息序列 ,,,,21i m m m 划分成等长的消息组 ),,,,(),,,,(22121n n n n m m m m m m ++在密钥t k k k k ,,,21 =的控制下按固定的加密算法一组一 组进行加密,输出一组一组密文 ),,,,(),,,,(22121l l l l c c c c c c ++。 下面的实验以DES 算法为例,DES 算法明文分组长为64bit ,加密后得到64bit 的密文,输入初始种子密钥为64bit ,第8、16、24、32、40、48、56、64为奇偶校验位,实际的密钥长为56bit 。DES 加密过程由三个阶段来完成: (1) 初始置换IP ,用于重排明文分组的64bit 数据; (2) 相同结构的16轮迭代,每轮中都有置换和代换运算,第16轮变换的输出分为左右两半,并交换次序。 (3) 逆初始置换IP -1 (为IP 的逆)后,产生64bit 的密文。 实验要求: (1) Windows 系列操作系统; (2) VC6.0编程环境。 (3) 提交完整的程序代码清单和详细的注释; (4) 要求有程序运行结果显示。当加密成功时,得到密文;输入相同的密钥,能将密文恢复成明文。 实验主要步骤: (1) 熟悉分组密码加解密算法的基本原理,加深对所提供的部分源程序的理解; (2) 分析源程序中密码算法的加解密和子密钥生成等典型模块的主要功能,并对源程序加上注释; (3) 在已提供的部分源程序的基础上,添加源程序省缺的部分; (4) 对给定的消息分组进行加解密运算和验证。 源代码: #include #include #include typedef bool (*PSubKey)[16][48]; enum {ENCRYPT,DECRYPT}; //选择:加密;解密 static bool SubKey[2][16][48]; // 16圈子密钥 static bool Is3DES; // 3次DES 标志 static char Tmp[256], deskey[16]; //暂存字符串,密钥串

杭电密码学DES密码实验报告

课程实验报告 课程密码学实验 学院通信工程学院 专业信息安全 班级14083611 学号14084125 学生姓名刘博 实验名称DES密码实验 授课教师胡丽琴

DES密码实验 一、实验要求: 1、了解分组密码的起源与涵义。 2、掌握DES密码的加解密原理。 3、用Visual C++实现DES密码程序并输出结果。 二、实验内容: 1、1949年,Shannon发表了《保密系统的通信理论》,奠定了现代密码学的基础。他还指出混淆和扩散是设计密码体制的两种基本方法。扩散指的是让明文中的每一位影响密文中的许多位,混淆指的是将密文与密钥之间的统计关系变得尽可能复杂。而分组密码的设计基础正是扩散和混淆。在分组密码中,明文序列被分成长度为n的元组,每组分别在密钥的控制下经过一系列复杂的变换,生成长度也是n的密文元组,再通过一定的方式连接成密文序列。 2、DES是美国联邦信息处理标准(FIPS)于1977年公开的分组密码算法,它的设计基于Feistel对称网络以及精心设计的S盒,在提出前已经进行了大量的密码分析,足以保证在当时计算条件下的安全性。不过,随着计算能力的飞速发展,现如今DES已经能用密钥穷举方式破解。虽然现在主流的分组密码是AES,但DES的设计原理仍有重要参考价值。在本实验中,为简便起见,就限定DES 密码的明文、密文、密钥均为64bit,具体描述如下: 明文m是64bit序列。 初始密钥K是64 bit序列(含8个奇偶校验bit)。 子密钥K1, K2…K16均是48 bit序列。 轮变换函数f(A,J):输入A(32 bit序列), J(48 bit序列),输出32 bit序列。 密文c是64 bit序列。 1)子密钥生成: 输入初始密钥,生成16轮子密钥K1, K2 (16) 初始密钥(64bit)经过置换PC-1,去掉了8个奇偶校验位,留下56 bit,接着分成两个28 bit的分组C0与D0,再分别经过一个循环左移函数LS1,得到C1与D1,连成56 bit数据,然后经过置换PC-2,输出子密钥K1,以此类推产生K2至K16。

实验报告_密码学

信息安全实验报告 学号: 学生姓名: 班级:

实验三密码学实验 一、古典密码算法实验 一、实验目的 通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。 二、编译环境 运行windows 或linux 操作系统的PC 机,具有gcc(linux)、VC (windows)等C语言编译环境。 三、实验原理 古典密码算法历史上曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。 1.替代密码 替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如:明文字母a、b、c、d ,用D、E、F、G做对应替换后形成密文。 替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替代密码等。下面我们介绍一种典型的单表替代密码,恺撒(caesar)密码,又叫循环移位密码。它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第k个字母替代。它的加密过程可以表示为下面的函数:E(m)=(m+k) mod n 其中:m 为明文字母在字母表中的位置数;n 为字母表中的字母个数;k 为密钥;E(m)为密文字母在字母表中对应的位置数。例如,对于明文字母H,其在字母表中的位置数为8,设k=4,则按照上式计算出来的密文为L:E(8) = (m+k) mod n = (8+4) mod 26 = 12 = L

2.置换密码 置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改 变,从而实现明文信息的加密。置换密码有时又称为换位密码。 矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给的 顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中字母,从而 形成密文。例如,明文为attack begins at five,密钥为cipher,将明文按照每行 6 列的形式排在矩阵中,形成如下形式: a t t a c k b e g i n s a t f i v e 根据密钥cipher中各字母在字母表中出现的先后顺序,给定一个置换: 1 2 3 4 5 6 f = 1 4 5 3 2 6 根据上面的置换,将原有矩阵中的字母按照第 1 列,第 4 列,第 5 列,第 3 列, 第2列,第 6 列的顺序排列,则有下面形式: a a c t t k b i n g e s a I v f t e 从而得到密文:abatgftetcnvaiikse 其解密的过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文。 四、实验内容和步骤 1、根据实验原理部分对替代密码算法的介绍,自己创建明文信息,并选择 一个密钥k,编写替代密码算法的实现程序,实现加密和解密操作。 2、根据实验原理部分对置换密码算法的介绍,自己创建明文信息,并选择一个密钥,编写置换密码算法的实现程序,实现加密和解密操作。 五、总结与思考 记录程序调试过程中出现的问题,分析其原因并找出解决方法。记录最终实现的程序执行结果。

人机交互实验报告及实验结果

中北大学软件学院 实验报告 专业软件工程 课程名称人机交互 学号 姓名 辅导教师何志英成绩 实验日期2012/3/13实验时间19:00-22:00

1实验名称 试验一:最新人机交互技术 2、实验目的 了解最新人机交互的研究内容 3、实验内容 通过网络查询最新人机交互相关知识。 (1)在百度中找到“最新人机交互视频”的相关网页,查看视频。 (2)什么是Kinect技术。 (3)人机交互技术在各个领域的应用。 4、测试及结果 (1)已在百度中查看“最新人机交互视频”的相关网页。 (2)Kinect是微软在2010年6月14日对XBOX360体感周边外设正式发布的名字。 (3)人机交互技术已成为解决医疗、教育、科研、环保等各类重大社会问题不可或缺的重要工具 5、心得 通过此实验,我了解人机交互技术在社会各个行业的重大作用。辅导教师何志英成绩 实验日期2012/3/13实验时间19:00-22:00 1、实验名称 实验二:立体视觉 2、实验目的 掌握立体视觉的原理

3、实验要求 通过网络查询立体视觉相关知识。 (1)在虚拟环境是如何实现立体视觉? (2)3D和4D电影的工作原理。 4、测试及结果 (1)实物虚化的视觉跟踪技术使用从视频摄像机到x-y平面阵列,周围光或者跟踪光在图像投影平面不同时刻和不同位置上的投影,计算被跟踪对象的位置和方向。 视点感应必须与显示技术相结合,采用多种定位方法(眼罩定位、头盔显示、遥视技术和基于眼肌的感应技术)可确定用户在某一时刻的视线。例如将视点检测和感应技术集成到头盔显示系统中,飞行员仅靠“注视”就可在某些非常时期操纵虚拟开关或进行飞行控制 (2) 4D电影是在3D立体电影的基础上加环境特效模拟仿真而组成的新型影视产品。所谓4D电影,也叫四维电影;即三维的立体电影和周围环境模拟组成四维环境。观众在看立体电影时,顺着影视内容的变化,可实时感受到风暴、雷电、下雨、撞击、喷洒水雾、拍腿等身边所发生与立体影象对应的事件,4D的座椅是具有喷水、喷气、振动、扫腿等功能的,以气动为动力的。环境模拟仿真是指影院内安装有下雪、下雨、闪电、烟雾等特效设备,营造一种与影片内容相一致的环境。 5、心得 通过本次试验,我明白了立体视觉以及3D、4D电影的工作原理。

密码学实验报告模板总结模板计划模板.doc

密码学应用与实践课程实验报告 实验 1:实现 DES密码体制 一、实验目的 1.编写程序实现 DES的加、解 密:1)编程构造 DES的密钥; 2)应用上述获得的密钥将一段英文或文件进行加、解密。 2.用 DES算法实现口令的安全 二、实验内容 1.DES原理 DES综合运用了置换,代换,移位多种密码技术,是一种乘积密码。在算法结构上采用迭代 结构,从而使其结构清晰,调理清楚,算法为对合运算,便于实现,运行速度快。DES使用了初始置换IP 和 IP-1 各一次(相应的置换看算法描述图表)置换P16 次,安排使用这 3 个置换的目的是把数据彻底打乱重排。选择置换 E 一方面把数据打乱重排,另一方面把32 位输入扩展为48 位,算法中除了S- 盒是非线性变换外,其余变换均为显示变换,所以保密 的关键是选择S- 盒。符合以下 3 条准则: (1)对任何一个 S- 盒而言,没有任何线性方程式等价于此S-盒的输出输入关系,即是S- 盒是非线性函数。 (2)改变 s- 盒的任何一位输入,都会导致两位以上的输出改变,即满足" 雪崩效应 " 。(3)当固定某一个位的输入时,S- 盒的 4 个出位之间,其中0 和 1 的个数之差小。这个准 则的本质是数据压缩,把四位输入压缩为 4 位输出。选择 S-盒函数的输入中任意改变数位, 其输出至少变化两位。因为算法中使用了16 次迭代,大大提高了保密性。 2.DES算法由加密、解密和子密钥的生成三部分组成 1)加密 DES算法处理的数据对象是一组64 比特的明文串。设该明文串为m=m1m2m64 (mi=0 或 1) 。明文串经过64 比特的密钥K 来加密,最后生成长度为64 比特的密文E。其加密过程图示如下:

密码学实验第三组实验报告

云南大学数学与统计学实验教学中心实验报告 课程名称:密码学实验学期:2013-2014学年第一学期成绩: 指导教师:陆正福学生姓名:卢富毓学生学号:20101910072 实验名称:零知识证明实验要求:必做实验学时:4学时 实验编号: No.3 实验日期:2013/9/28完成日期:2012/10/18 学院:数学与统计学院专业:信息与计算科学年级: 2010级 一、实验目的: 了解零知识证明,同时掌握FFS识别方案。 二、实验内容: 1. 理解零知识证明 2. 基于GMP实现FFS零知识证明方案 三、实验环境 Linux平台 Code::Block IDE https://www.360docs.net/doc/443979139.html, 网络在线编程平台(本实验是在此平台中完成的,效果一样) 四、实验过程(请学生认真填写): 1. 预备知识: “零知识证明”它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。 2. 实验过程 A、原理分析: Feige-Fait-Shamir是一种并行的认证形式。具体做法如下 首先:选择大素数q 和p, 计算n=pq ,Peggy 拥有密钥s1, s2, ...,sk 接着做如下UML图中的内容:

//缺点有:首先在编写好程序后才发现,无法模拟伪造者来进行。这个由结果就能看出来。 //同时,此程序仅仅模拟,做不到并行认证。 五、实验总结 1.遇到的问题、分析并的出方案(列出遇到的问题和解决办法,列出没有解决的问题):遇到问题: 主要是对于算法的不熟悉,不能清晰的认识整个算法运作。 分析并解决: 仔细揣摩,并且动手写了一下算法的UML图。得到了加深。 2.体会和收获。 收获: 加深了GMP中函数的运用。 在学习零知识证明的知识后,了解了什么是零知识证明,同时会了一点零知识证明的方法。这是比较大的收获——毕竟以前从没有想过这方面的东西,接触之后才恍然。 当然这个FFS算法也并不是一定的安全。也存在着一定的缺陷和漏洞,例如验证次数、对于vi的猜测等等。 六、参考文献 GMP_Document 《应用密码学》林岱岳 《密码学概论》wade trape 七、教师评语:

密码学实验报告(AES,RSA)

华北电力大学 实验报告| | 实验名称现代密码学课程设计 课程名称现代密码学 | | 专业班级:学生姓名: 学号:成绩: 指导教师:实验日期:

[综合实验一] 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}等。在行X 和列Y 的字节值是{xy}。 (2) 把S 盒中的每个字节映射为它在有限域GF(k 2)中的逆。GF 代表伽罗瓦域,GF(82) 由一组从0x00到0xff 的256个值组成,加上加法和乘法。 ) 1(] [2)2(3488++++= x x x x X Z GF 。{00}被映射为它自身{00}。 (3) 把S 盒中的每个字节记成),,,,,,,,(012345678b b b b b b b b b 。对S 盒中每个字节的每位 做如下变换: i i i i i i c b b b b b i b ⊕⊕⊕⊕⊕='++++8mod )7(8mod )6(8mod )5(8mod )4( 上式中i c 是指值为{63}字节C 第i 位,即)01100011(),,,,,,,,(012345678=c c c c c c c c c 。符号(')表示更新后的变量的值。AES 用以下的矩阵方式描述了这个变换: ?? ? ?? ? ? ? ? ? ??? ? ????????????+???????????????????????????????????????? ????????????=??????????????????????????0110001111111000011111000011111000011111100011111100011111100011111100017654321076543210b b b b b b b b b b b b b b b b 最后完成的效果如图:

现代密码学-RC4校验 实验报告

现代密码学 实 验 报 告 院系:理学院 班级:信安二班 姓名: 学号:

前言 密码学(Cryptology)是研究秘密通信的原理和破译秘密信息的方法的一门学科。密码学的基本技术就是对数据进行一组可逆的数学变换,使未授权者不能理解它的真实含义。密码学包括密码编码学(Cryptography)和密码分析学(Cryptanalyst)两个既对立又统一的主要分支学科。研究密码变化的规律并用之于编制密码以保护信息安全的科学,称为密码编码学。研究密码变化的规律并用之于密码以获取信息情报的科学,称为密码分析学,也叫密码破译学。 密码学在信息安全中占有非常重要的地位,能够为信息安全提供关键理论与技术。密码学是一门古老而深奥的学问,按其发展进程,经历了古典密码和现代密码学两个阶段。现代密码学(Modern Cryptology)通常被归类为理论数学的一个分支学科,主要以可靠的数学方法和理论为基础,为保证信息的机密性、完整性、可认证性、可控性、不可抵赖性等提供关键理论与技术。

RC4密码算法算法实现 实验目的: 理解流密码的概念及相关结构; 理解并能够编写基本的流密码体制; 熟练应用C/C++编程实现RC4密码算法体制。 实验内容: 编程实现RC4加/解密算法。 实验原理: RC4算法是一种序列密码体制或称流密码体制,其加密密钥和解密密钥相同RC4的 密钥长度可变,但为了确保哪去安全强度,目前RC4至少使用128位的密钥。 用1~256个字节(8~2048位)的可变长度密钥初始化一个256个字节的状态向量S,S的元素记为S[0],S[1],…,S[255],从始至终置换后的S包含从0到255的所有8位数。对于加密和解密,字节K是从S的255个元素中按一种系统化的方式选出的一个元素生成的。每生成一个K的值,S中的元素个体就被重新置换一次。 实验代码: Encrypt.h文件: #ifndef _ENCRYPT_RC4_ #define _ENCRYPT_RC4_ #include

密码学实验讲义及实验报告2014

密码学基础 实验指导书 黑龙江大学计算机科学技术学院 2013年3月

目录 前言........................................................................................................................... - 2 -要求与评分标准....................................................................................................... - 3 -1要求. (3) 2评分标准 (3) 实验1 古典密码的实现(3学时) .................................................................... - 4 -实验2 对称密钥密码体制的实现(6学时) .................................................... - 4 -实验3 公开密钥密码算法的实现(6学时) .................................................... - 5 -实验4 数字签名算法的实现(3学时) ............................................................ - 5 -附录1:实验报告格式 ........................................................................................... - 7 -

人机交互实验报告

中北大学软件学院实验报告 专业:软件工程 方向:电子商务 课程名称:人机交互基础教程 班级:1021010C01 学号: 姓名: 辅导教师:李玉蓉 2012年2月制

成绩: 实验时间年月日时至时学时数 1.实验名称 最新人机交互技术 2.实验目的 了解最新人机交互的研究内容 3.实验内容 通过网络查询最新人机交互相关知识。 1、在百度中找到“最新人机交互视频”的相关网页,查看视频。 2、什么是eTable 。 3、人机交互技术在各个领域的应用 4. 实验原理及流程图

成绩: 5.实验过程或源代码 Etable是一种多功能电脑桌,集时尚、实用、经济于一“桌”,无论是居家卧室,还是出差旅途,都可以提供一个舒适、惬意的网上时光,部件有:多角度调节桌面、2个风扇、1个USB插口、1个活动USB插头、鼠标垫、桌腿可调节长度。 人机交互技术的发展极大地促进了计算机的快速发展和普及,已经在制造业、教育、娱乐、军事和日常生活等领域得到 广泛应用。在制造业用于产品设计、装配仿真等各个环节;在 教育中用于研发沉浸式的虚拟世界系统,供学者学习;在军事 方面头显示器等的出现给军事训练提供了极大地方便;在娱乐 中3d和4d电影的拍摄都应用到此技术;体育方面用于体育训 练和报道等;生活中,触屏手机,人脸识别技术等都用到人机 交互技术。 6.实验结论及心得 通过在网上查阅有关近期最新人机交互的视频和网页,我对人机交互的发展及在各方面的应用有了初步了解和认识

实验时间年月日时至时学时数1.实验名称 立体视觉 2.实验目的 掌握立体视觉的原理 3.实验内容 通过网络查询立体视觉相关知识。 1. 在虚拟环境是如何实现立体视觉? 2. 3D和4D电影的工作原理。 4.实验原理及流程图

密码学实验报告总结

密码学实验报告(本文档为Word版本,下载后可自由编辑) 项目名称:××××××××× 项目负责人:××× 联系电话:××××× 编制日期:×××××

密码学实验报告 实验目的:掌握Caesar密码加密解密原理,并利用VC++编程实现。 实验内容:Caesar密码的加密原理是对明文加上一个密钥(偏移值)而得到密文。假设密钥为3,那么字母“a”对应的ASCII码为97,加上3得100正好是字母“d”的ASCII码值, 实验说明:加密实现的两种方式,只限定英文字母(区分大小写),加密时,根据明文字符是小(大)写字母,采用加密运算: 密文字符=“a”或“A”+(明文字符-“a”或“A”+password%26+26)%26 如果输入其他字符,则直接原样输出,不作处理 可以是任意字符 加密时,我们不做任何区分,直接利用Caesar密码算法 密文字符=明文字符+password 解密反之。 实验结果: void CCaesarDlg::OnButton1() //加密按钮 { UpdateData(TRUE); //从界面上的输入的值传入成员变量 m_crypt=m_plaintxt; //密文进行初始化,它与明文的长度是相同的 for(int i=0;i=48&&m_plaintxt.GetAt(i)<=57) //如果输入的字符是数字 { m_crypt.SetAt(i,'0'+(m_plaintxt.GetAt(i)-'0'+m_password%10 +10)%10);

现代密码学学习报告

现代密码学学习报告 第一章 概论 1.1信息安全与密码技术 信息的一般定义属于哲学范畴。信息是事物运动的状态与方式,是事物的一种区别于物质与能量的属性。 “信息”——数据。 机密性——拥有数据的一方或交换数据的各方不希望局外人或对手获得、进而读懂这些数据。 完整性——数据在交换及保存中不被未授权者删除或改动,或者合法的接受者能方便的判断该数据是否已经被篡改。 认证性——也称“不可否认性”或“抗抵赖”,包括信息源和接收端认证性,即信息系统中的实体不能否认或抵赖曾经完成的发送消息或接收消息的操作。利用信息源证据可以检测出消息发送方否认已发送某消息的抵赖行为,利用接收端证据可以检测出消息接收方否认已接收某消息的抵赖行为。此类证据通常还包括时间/时序或“新鲜性”证据。 可用性——授权用户能对信息资源有效使用。显然,信息系统可靠性是其支撑之一。 公平性——信息具有的社会或经济价值只能在交互中体现。公平性就是指交换规则或交互协议要使得参与信息交互的各方承担安全风险上处于相同或相当的地位。 可控性——是指对信息的传播及传播的内容以至信息的机密性具有控制能力的特性。一般指信息系统或(社会)授权机构根据某种法规对信息的机密性、信息的传播通道、特定内容信息的传播具有控制能力的特性,以及获取信息活动审计凭证能力的特性,如“密钥托管”、“匿名撤销”、实时内容检测与过滤、计算机犯罪或诉讼的司法取证等。 1.2密码系统模型和密码体制 密码系统基本模型: 密码体制的分类:对称密码体制的古典算法有简单代换、多名代换、多表代换等。 非对称密码体制:使用非对称密码体制的每一个用户一个是可以公开的,称为公开密钥,简称公钥,用pku 表示;另外一个则是秘密的,称为秘密秘钥,简称私钥,用sku 表示。非对称密码体制又称为双钥密码体制或公钥密码体制。 公钥密码体制的主要特点是将加密能力分开并分别并分别授予不同的用户,因而可以实现信 源M 加密器() c m =1k E 非法接入者密码分析员 (窃听者)搭线信道 (主动攻击) 搭线信道(被动攻击)解密器接收者 ()m c =2k D 密钥源密钥源1K 2 K m m 'm c ' c 1 k 2k 信道密钥信道

《现代密码学》实验报告

现代密码学实验报告 学生姓名骆秀娟 学号0909121906 专业班级计科1204班 指导教师段桂华 学院信息科学与工程学院 完成时间2014年4月25日

实验一对称密码算法实验 [实验目的] 1.掌握密码学中经典的对称密码算法DES、AES、RC4的算法原理。 2.掌握DES、AES、RC4的算法流程和实现方法。 [实验预备] 1.DES算法有什么特点?算法中的哪些结构保证了其混淆和扩散的特性? 2.AES算法的基本原理和特点。 3.流密码RC4的密钥流生成以及S盒初始化过程。 [实验内容] 1.分析DES、AES、RC4、SHA的实现过程。 2. 用程序设计语言将算法过程编程实现。 3. 完成字符串数据的加密运算和解密运算 输入明文:Idolikethisbook 输入密钥:cryption [实验步骤] 1. 预习DES、AES、RC4算法。 2. 写算法流程,用程序设计语言将算法过程编程实现。 3. 输入指定的明文、密钥进行实验,验证结果。 4. 自己选择不同的输入,记录输出结果。 写出所编写程序的流程图和运行界面、运行结果。

DES程序流程图: DES运行结果:

AES程序流程图: AES运行结果:

RC4流程图:

RC4运行结果: [问题讨论] 1. 在DES算法中有哪些是弱密钥?哪些是半弱密钥? 2. 改变明文或密钥中的一个比特值可能影响AES值中的多少比特? 3.分析实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。 回答问题 解:1>弱密钥有以下几种情况:全0;全1;一半为0,一半为1; 半弱密钥如下:E01F E01F E01F E01F FE01 FE01 FE01 FE01 E001 E001 F101 F101 FE1F FE1F FE01 FE01 2>改变一个比特值最多改变4个AES值。 3>在RC4实验中,为了将输入的char型密钥分个存储进数组中,刚开始我想把它转化为string型,再存储,但是string型数据不能直接从键盘输入,且最后

人机交互--拼图游戏实验报告

人机交互 实验报告 题目趣味拼图游戏界面的设计与 实现 学院 专业 姓名 学号 班级 二O一三年一月四日

1.设计内容 1.1趣味拼图: 趣味拼图 1.2面向对象: 儿童 1.3主要功能描述 该系统用Java语言实现,小朋友通过控制鼠标,实现方格的移动。 1.4人机交互设计: 考虑该系统面向小朋友,拼图的难度做的很低,而且操作简单,图片是采用卡通动画上的人物,简单并且能吸引小朋友。考虑到一直点击鼠标会有点枯燥,该系统增加了各种好玩的音效,当点击鼠标,系统会根据不同的情况配有不同的声音,增加了拼图游戏的趣味性。并且小朋友可以选择自己喜欢的模式进行拼图,考虑到面向对象为小朋友,界面很友好,图片的颜色采用了比较鲜艳的颜色,主角卡通,线条清晰,各部分特点明显,也降低了拼图的难度,又不失趣味性,界面的按钮也进行了卡通形象装点。 2. 系统结构 2.1系统主界面: 系统刚开始进去是没有打乱顺序的拼图状态。 2.2系统开始界面: 该界面为打乱谁许后的状态。 2.3系统预览界面: 该界面是为方便小朋友拼图过程中没有记清楚样子设计的,能随时查看。 2.4系统设置: 该功能可以实现选取图片,小朋友可以选择自己喜爱的图片进行拼图。 2.5编码: 后台编码用了Java语言,总共设计了4个类,没有用数据库。 3界面设计 3.1拼图界面

3.1.1界面功能: 拼图主界面,总览全图。 3.1.2截图: 3.1.3操作: 小朋友可以通过点击鼠标实现方块的移动。 3.1.4界面设计的交互思想及交互原则: 为方便拼图,刚开始进入界面是一个没有乱序的图片,小图片大小为 100*100的正方形,看上去比较舒服。考虑到面向对象为小朋友,图片的颜色采用了比较鲜艳的颜色,主角卡通,线条清晰,各部分特点明显。体现了交互性原则。 3.1.5主要代码: private void init(){ container = this.getContentPane(); //按钮 start = new JButton("开始"); start.setBackground(Color.getHSBColor(0,111,1213)); start.setIcon(new ImageIcon("pictrue/start.png")); start.addActionListener(this); preview = new JButton("预览"); preview.setBackground(Color.getHSBColor(321, 102, 002));

密码学实验报告

《—现代密码学—》 实验指导书 适用专业:计算机科学与技术 江苏科技大学计算机科学学院 2011年11 月 实验一古典密码 实验学时:2学时 实验类型:验证 实验要求:必修 一、实验目的

编程实现古典密码的加解密方法。 二、实验内容 (1)移位密码的加密和解密函数。 (2)仿射密码的加密和解密函数。 (3)维吉尼亚密码的加密和解密函数。 三、实验原理、方法和手段 (1)移位密码 对于明文字符x ,加密密钥k ,加密方法为 ,1,2,,25y x k k =+= 解密方法为 ,1,2,,25x y k k =-= (2)仿射密码 对于明文字符x ,加密密钥(,)a b ,加密方法为 ,gcd(,26)1,1,2,,25y ax b a b =+== 解密方法为 1()x a y b -=- (3)维吉尼亚密码 选取密钥字Key ,将明文按照密钥字长度分组,将明文与密钥字对应字符相加并对26求余,即为密文字符。 i i i y x k =+ 解密过程为 i i i x y k =- 四、实验组织运行要求 本实验采用集中授课形式,每个同学独立完成上述实验要求。 五、实验条件 每人一台计算机独立完成实验,有如下条件: (1)硬件:微机;

(2)软件:VC++6.0、VC++.Net 2005。 六、实验步骤 (1)将各函数编写完成; (2)在主函数中调用各函数,实现加密和解密。 七、实验报告 实验报告主要包括实验目的、实验内容、实验原理、源程序及结果。移位密码加密: #include #define n 3 //移位位数 void change(char string[]) { int i; for(i=0;string[i]!='\0';i++) { if(string[i]>='a'&&string[i]<='z') string[i]=(string[i]+n>='z'?string[i]+n-26:string[i]+n); } } void main() { char str[100]; printf("请输入一段明文"); gets(str); change(str); printf("密文为:\n"); puts(str); }

密码学实验报告

江苏大学 学院计算机学院 专业信息安全0902 姓名*** 学号3090604035 小组成员*******

AES对称加密算法实现 一.AES对称加密算法实现原理 AES(The Advanced Encryption Standard)接受一个128位的明文,并且在一个128、192或者256位秘密密钥的控制下产生一个128位的密文。它是一个替代-置换网络的设计,并且带有一个称作轮(rand)的步骤的集合,其中轮数可以是9、11或者13(取决于密钥的长度),这样可以将明文映射为密文。 AES实际上能定义为在域GF(2)的元素上的一系列标量的运算。它实质上是在整数模2所组成的域,但是它扩展到了多项式域GF(2)[x]中。为了构造一个域,需要使用一个能够不被任何一个具有相同底GF(2)的度数更小的多项式整除的多项式,在AES中选择了v (x)= x^8 + x^4 + x^3 + x + 1。用整数存储时,它表示值0x11B。域中的加法是一个简单异或(xor)操作。乘法就是乘以其他的多项式。一个单元a的乘法逆元是另一个单元b,使得ab模AES的多项式和多项式p(x)=1是同余的。a(x)=0的逆是它本身。 二.AES对称加密算法实现过程 AES 算法是分组密码算法,它的输入分组、输出分组以及加/ 解密过程中的中间分组都是128比特。(对称密码算法根据对明文消息加密方式的不同可分为两大类,即分组密码和流密码。分组密码将消息分为固定长度的分组,输出的密文分组通常与输入的明文分组长度相同。) 1、AES 的加密与解密框图如图所示 (1) 加密变换

设X是AES 的128 比特明文输入,Y是128 比特的密文输出,则AES 密文Y可以用下面的复合变换表示: Y= Ak(r + 1)·R·S·Akr·C·R·S·Ak(r21)·?·C·R·S·Ak1 (X)其中“·”表示复合运算。这里Aki :表示对X 的一个变换Aki (X) = XY Ki (Ki 为第i 轮的子密钥,为比特串的异或运算) 。S:S 盒置换。即对每一个字节用S2Box 做一个置换。S2Box 是一个给定的转换表。R: 行置换。C: 列置换。 s′(x) = a (x) á s (x) 这里á 是特殊的乘法运算 (2) 解密变换 解密变换是加密变换的逆变换。 2、AES(128bits密钥)加密解密流程如下图所示

相关文档
最新文档