《现代密码学》实验报告
现代密码学实验报告
![现代密码学实验报告](https://img.taocdn.com/s3/m/910de35afe4733687e21aa22.png)
SubBytes(); //字节代换
ShiftRows(); //行移位
MixColumns(); //列混合
AddRoundKey(round); //密钥加
}
SubBytes();
ShiftRows();
AddRoundKey(Nr);
// 加密结束,将机密结果填入数组out中以便输出
for(i=0;i<4;i++)
// 把明文赋值到状态数组中
for(i=0;i<4;i++)
for(j=0;j<4;j++)
state[j][i] = in[i*4 + j];
// 先与初始轮密钥相加
AddRoundKey(0);
// 第一轮至(Nr-1)轮的迭代运算,第Nr轮不用进行列混合运算
for(round=1;round<Nr;round++)
作用:身份认证,是任何网络安全方案的一个基础。如在大部分情况下, 需要认证的实体是通信的发送者,即需要确定访问者的合法性问题。 S/KEY协议主要是用于身份认证。
二、用MD5实现加密
1、算法简介
MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。
现代密码学-DES加密算法 实验报告
![现代密码学-DES加密算法 实验报告](https://img.taocdn.com/s3/m/6b41ad3189eb172dec63b767.png)
现代密码学实验报告院系:班级:姓名:学号:前言密码学(Cryptology)是研究秘密通信的原理和破译秘密信息的方法的一门学科。
密码学的基本技术就是对数据进行一组可逆的数学变换,使未授权者不能理解它的真实含义.密码学包括密码编码学(Cryptography)和密码分析学(Cryptanalyst)两个既对立又统一的主要分支学科。
研究密码变化的规律并用之于编制密码以保护信息安全的科学,称为密码编码学.研究密码变化的规律并用之于密码以获取信息情报的科学,称为密码分析学,也叫密码破译学.密码学在信息安全中占有非常重要的地位,能够为信息安全提供关键理论与技术.密码学是一门古老而深奥的学问,按其发展进程,经历了古典密码和现代密码学两个阶段。
现代密码学(Modern Cryptology)通常被归类为理论数学的一个分支学科,主要以可靠的数学方法和理论为基础,为保证信息的机密性、完整性、可认证性、可控性、不可抵赖性等提供关键理论与技术。
DES加密算法的实现实验目的理解对称加密算法的原理和特点。
实验原理DES是一种分组加密算法,所谓分组加密算法就是对一定大小的明文或密文来做加密或解密动作。
而在DES这个加密系统中,每次加密或解密的分组大小均为64位,所以DES没有密文扩充的问题。
对大于64位的明文只要按每64位一组进行切割,而对小于64位的明文只要在后面补“0"即可。
另一方面,DES所用的加密或解密密钥也是64位大小,但因其中有8个位是用来作奇偶校验的,所以64位中真正起密钥作用的只有56位,密钥过短也是DES 最大的缺点。
DES加密与解密所用的算法除了子密钥的顺序不同外,其他部分完全相同。
实验环境运行Windows或Linux操作系统的PC机。
实验代码:—--————-——-——本实验采用56位密钥加密64位数据—-———--———--#include <stdlib.h〉#include 〈stdio.h〉#include "bool。
现代密码学实验报告
![现代密码学实验报告](https://img.taocdn.com/s3/m/28fae5c92cc58bd63186bda5.png)
现代密码学实验报告学生姓名学号专业班级指导教师学院完成时间实验一对称密码算法实验[实验目的]1.掌握密码学中经典的对称密码算法DES、AES、RC4的算法原理。
2.掌握DES、AES、RC4的算法流程和实现方法。
[实验内容]1. 分析DES、AES、RC4、SHA的实现过程。
2. 用程序设计语言将算法过程编程实现。
3. 完成字符串数据的加密运算和解密运算输入明文:Idolikethisbook输入密钥:cryption[实验步骤]一、DES算法1、DES算法及原理DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。
明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。
2、DES算法加解密过程(1) DES算法加密过程如下:a.初始置换。
DES的第一阶段包括64位分组的置换,改变每个分组中位的顺序。
术语置换使用其严格的数学意义;只改变了顺序。
这64位数据现在被分成两半:L0(左半部分)和R0(右半部分)。
下标0说明是原始的数据。
在DES算法第二阶段的每次循环后,这些下标加1。
b.循环移位(16次)一种根据密钥,并且依赖于表格的算法。
这种操作通常被称为数据移位。
这个算法要重复16次,但由于每次移位都使用密钥的不同子分组,因此每次移位的操作各不相同。
密钥的子分组由另一组表格和表格的移位算法来确定。
在每次循环以后,L(左半部分)和R(右半部分)的下标依次加一。
第16次循环的结果被称为预输出。
c.逆置换DES的最后一个阶段包括64位分组的置换,改变每个分组中位的顺序,这与第1阶段的操作类似。
这次置换的输出结果就是密文。
(2)解密过程DES的解密过程和加密过程相同,只是在解密过程中将子密钥的使用顺序颠倒。
现代密码学实验报告
![现代密码学实验报告](https://img.taocdn.com/s3/m/9652f2a10722192e4536f6c9.png)
现代密码学实验报告学生姓名学号专业班级指导教师学院信息科学与工程学院完成时间2014年5月实验一对称密码算法实验[实验目的]1.掌握密码学中经典的对称密码算法DES、AES、RC4的算法原理。
2.掌握DES、AES、RC4的算法流程和实现方法。
[实验预备]1.DES算法有什么特点算法中的哪些结构保证了其混淆和扩散的特性答:分组比较短、密钥太短、密码生命周期短、运算速度较慢。
采用替代和置换的方法简单有效地遵循了香农定理,替代操作通过S盒达到了混淆效果,置换操作通过P盒扩散效果。
2.AES算法的基本原理和特点。
答:AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥长度不足时,会补齐)。
AES加密有很多轮的重复和变换。
大致步骤如下:1、密钥扩展(KeyExpansion),2、初始轮(Initial Round),3、重复轮(Rounds),每一轮又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最终轮(Final Round),最终轮没有MixColumns。
3.流密码RC4的密钥流生成以及S盒初始化过程。
答:RC4由伪随机数生成器和异或运算组成。
RC4的密钥长度可变,范围是[1,255]。
RC4一个字节一个字节地加解密。
给定一个密钥,伪随机数生成器接受密钥并产生一个S盒。
S盒用来加密数据,而且在加密过程中S盒会变化。
初始化长度为256的S盒。
第一个for循环将0到255的互不重复的元素装入S盒。
第二个for循环根据密钥打乱S盒。
下面i,j 是两个指针。
每收到一个字节,就进行while循环。
通过一定的算法((a),(b))定位S盒中的一个元素,并与输入字节异或,得到k。
循环中还改变了S盒((c))。
如果输入的是明文,输出的就是密文;如果输入的是密文,输出的就是明文。
[实验内容]1.分析DES、AES、RC4、SHA的实现过程。
现代密码学-RC4校验 实验报告
![现代密码学-RC4校验 实验报告](https://img.taocdn.com/s3/m/1c87f2e5f90f76c661371a6d.png)
现代密码学实验报告院系:理学院班级:信安二班姓名:学号:前言密码学(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 <string.h>#define BOX_LEN 256intGetKey(const unsigned char* pass, intpass_len, unsigned char *out);int RC4(const unsigned char* data, intdata_len, const unsigned char* key, intkey_len, unsigned char* out, int* out_len);static void swap_byte(unsigned char* a, unsigned char* b);char* Encrypt(const char* szSource, const char* szPassWord); // 加密,返回加密结果char* Decrypt(const char* szSource, const char* szPassWord); // 解密,返回解密结果char* ByteToHex(const unsigned char* vByte, constintvLen); // 把字节码pbBuffer转为十六进制字符串,方便传输unsigned char* HexToByte(const char* szHex); // 把十六进制字符串转为字节码pbBuffer,解码#endif // #ifndef _ENCRYPT_RC4_Encrypt.cpp文件:#include "Encrypt.h"char* Encrypt(const char* szSource, const char* szPassWord) // 加密,返回加密结果{if(szSource == NULL || szPassWord == NULL) return NULL;unsigned char* ret = new unsigned char[strlen(szSource)];intret_len = 0;if(RC4((unsigned char*)szSource,strlen(szSource),(unsigned char*)szPassWord,strlen(szPassWord),ret,&ret_len) == NULL)return NULL;char* ret2 = ByteToHex(ret, ret_len);delete[] ret;return ret2;}char* Decrypt(const char* szSource, const char* szPassWord) // 解密,返回解密结果{if(szSource == NULL || (strlen(szSource)%2 != 0) || szPassWord == NULL) return NULL;unsigned char* src = HexToByte(szSource);unsigned char* ret = new unsigned char[strlen(szSource) / 2 + 1];intret_len = 0;memset(ret, strlen(szSource) / 2 + 1,0);if(RC4(src, strlen(szSource) / 2, (unsigned char*)szPassWord, strlen(szPassWord), ret, &ret_len) == NULL)return NULL;ret[ret_len] = '/0';return (char*)ret;}int RC4(const unsigned char* data, intdata_len, const unsigned char* key, intkey_len, unsigned char* out, int* out_len){if (data == NULL || key == NULL || out == NULL)return NULL;unsigned char* mBox = new unsigned char[BOX_LEN];if(GetKey(key, key_len, mBox) == NULL)return NULL;inti=0;int x=0;int y=0;for(int k = 0; k <data_len; k++){x = (x + 1) % BOX_LEN;y = (mBox[x] + y) % BOX_LEN;swap_byte(&mBox[x], &mBox[y]);out[k] = data[k] ^ mBox[(mBox[x] + mBox[y]) % BOX_LEN];}*out_len = data_len;delete[] mBox;return -1;}intGetKey(const unsigned char* pass, intpass_len, unsigned char* out) {if(pass == NULL || out == NULL)return NULL;inti;for(i = 0; i< BOX_LEN; i++)out[i] = i;int j = 0;for(i = 0; i< BOX_LEN; i++){j = (pass[i % pass_len] + out[i] + j) % BOX_LEN;swap_byte(&out[i], &out[j]);}return -1;}static void swap_byte(unsigned char* a, unsigned char* b){unsigned char swapByte;swapByte = *a;*a = *b;*b = swapByte;}// 把字节码转为十六进制码,一个字节两个十六进制,内部为字符串分配空间char* ByteToHex(const unsigned char* vByte, constintvLen){if(!vByte)return NULL;char* tmp = new char[vLen * 2 + 1]; // 一个字节两个十六进制码,最后要多一个'/0'int tmp2;for (inti=0;i<vLen;i++){tmp2 = (int)(vByte[i])/16;tmp[i*2] = (char)(tmp2+((tmp2>9)?'A'-10:'0'));tmp2 = (int)(vByte[i])%16;tmp[i*2+1] = (char)(tmp2+((tmp2>9)?'A'-10:'0'));}tmp[vLen * 2] = '/0';return tmp;}// 把十六进制字符串,转为字节码,每两个十六进制字符作为一个字节unsigned char* HexToByte(const char* szHex){if(!szHex)return NULL;intiLen = strlen(szHex);if (iLen<=0 || 0!=iLen%2)return NULL;unsigned char* pbBuf = new unsigned char[iLen/2]; // 数据缓冲区int tmp1, tmp2;for (inti=0;i<iLen/2;i++){tmp1 = (int)szHex[i*2] - (((int)szHex[i*2]>='A')?'A'-10:'0');if(tmp1>=16)return NULL;tmp2 = (int)szHex[i*2+1] - (((int)szHex[i*2+1]>='A')?'A'-10:'0');if(tmp2>=16)return NULL;pbBuf[i] = (tmp1*16+tmp2);}return pbBuf;}main.cpp文件#include <iostream>#include <string>#include <stdio.h>#include "Encrypt.h"intmain(){inti;std::cout<< "请选择你要进行的操作:1 .加密 2.解密" <<std::endl;std::cin>>i;if (i == 1){char source[100];char pass[100];char *result = NULL;std::cout<< "请输入明文:";std::cin>> source; std::cout<<std::endl;std::cout<< "请输入密钥:";std::cin>> pass;result = Encrypt(source, pass);printf("密文为:%s/n", result);delete[]result;}else if (i == 2){char result[100];char pass[100];char *source = NULL;std::cout<< "请输入密文:";std::cin>> result; std::cout<<std::endl;std::cout<< "请输入密钥:";std::cin>> pass;source = Encrypt(result, pass);printf("明文为:%s/n", source);delete[]source;}elsestd::cout<< "您输入的不合法!" <<std::endl;return 0;}实验结果:。
现代密码算法实验报告(3篇)
![现代密码算法实验报告(3篇)](https://img.taocdn.com/s3/m/89a5e456effdc8d376eeaeaad1f34693daef10b2.png)
第1篇一、实验目的1. 了解现代密码学的基本原理和数论基础知识;2. 掌握非对称密码体制的著名代表RSA加密算法的工作原理和流程;3. 设计实现一个简单的密钥系统;4. 掌握常用加密算法AES和DES的原理及实现。
二、实验内容1. RSA加密算法实验2. AES加密算法实验3. DES加密算法实验三、实验原理1. RSA加密算法RSA算法是一种非对称加密算法,由罗纳德·李维斯特、阿迪·沙米尔和伦纳德·阿德曼三位密码学家于1977年提出。
其基本原理是选择两个大质数p和q,计算它们的乘积n=pq,并计算欧拉函数φ(n)=(p-1)(q-1)。
选择一个整数e,满足1<e<φ(n)且e与φ(n)互质。
计算e关于φ(n)的模逆元d。
公开密钥为(e,n),私有密钥为(d,n)。
加密过程为C=Me mod n,解密过程为M=Cd mod n。
2. AES加密算法AES(Advanced Encryption Standard)是一种分组加密算法,采用128位分组大小和128、192或256位密钥长度。
AES算法主要分为四个阶段:初始轮、密钥扩展、中间轮和最终轮。
每个轮包括字节替换、行移位、列混淆和轮密钥加。
3. DES加密算法DES(Data Encryption Standard)是一种分组加密算法,采用64位分组大小和56位密钥长度。
DES算法主要分为16轮,每轮包括置换、置换-置换、S盒替换和密钥加。
四、实验步骤及内容1. RSA加密算法实验(1)选择两个大质数p和q,计算n=pq和φ(n)=(p-1)(q-1);(2)选择一个整数e,满足1<e<φ(n)且e与φ(n)互质,计算e关于φ(n)的模逆元d;(3)生成公开密钥(e,n)和私有密钥(d,n);(4)用公钥对明文进行加密,用私钥对密文进行解密。
2. AES加密算法实验(1)选择一个128、192或256位密钥;(2)初始化初始轮密钥;(3)进行16轮加密操作,包括字节替换、行移位、列混淆和轮密钥加;(4)输出加密后的密文。
密码学实验报告
![密码学实验报告](https://img.taocdn.com/s3/m/73e2326f0b1c59eef8c7b4d9.png)
《—现代密码学—》实验指导书适用专业:计算机科学与技术江苏科技大学计算机科学学院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<stdio.h>#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);}移位密码解密:#include<stdio.h>#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<'a'?string[i]-n+26:string[i]-n); }}void main(){char str[100];printf("请输入一段密文");gets(str);change(str);printf("明文为:\n");puts(str);}仿射密码加密:#include<stdio.h>void fun( char a[],int x,int y) {int i;for(i=0;a[i]!='\0';i++){a[i]=(x*(a[i]-97)+y)%26+97;}}main(){char string[100];int x,y;printf("输入");gets(string);printf("请输入密钥");scanf("%d,%d",&x,&y);printf("明文:%s\n",string);fun(string,x,y);printf("密文为:%s\n",string); }仿射密码解密:#include<stdio.h>void fun( char a[],int x,int y) {int i;for(i=0;a[i]!='\0';i++){a[i]=(x*(a[i]-97)+y)%26+97;}}main(){char string[100];int x,y;printf("输入");gets(string);printf("请输入密钥");scanf("%d,%d",&x,&y);printf("密文:%s\n",string);fun(string,x,y);printf("明文:%s\n",string);}密码加密:#include<stdio.h>void change(char old[],char new1[][5]){ int i,j,t;char temp[20][5];t=strlen(old);for(i=t;i<(5-t%5)+t;i++) //将一维数组old每5个分成一组不足5位的用X 补充old[i]='x';for(i=t+(5-t%5);i<100;i++)old[i]='\0';for(i=0;i<20;i++) //将一维数组old转换成一个20*5的二维数组tempfor(j=0;j<5;j++)temp[i][j]=old[5*i+j];for(i=0;i<20;i++) //密文字母交换顺序{new1[i][0]=temp[i][1];new1[i][1]=temp[i][4];new1[i][2]=temp[i][3];new1[i][3]=temp[i][0];new1[i][4]=temp[i][2];}}main(){char old[100],new1[20][5];gets(old);change(old,new1);printf("%s",new1);}密码解密#include<stdio.h>void change(char old[],char new1[][5]){ int i,j,t;char temp[20][5];t=strlen(old);for(i=0;i<20;i++) //将一维数组old转换成一个20*5的二维数组tempfor(j=0;j<5;j++)temp[i][j]=old[5*i+j];for(i=0;i<20;i++) //密文字母交换顺序{new1[i][1]=temp[i][0];new1[i][4]=temp[i][1];new1[i][3]=temp[i][2];new1[i][0]=temp[i][3];new1[i][2]=temp[i][4];}}main(){char old[100],new1[20][5];gets(old);change(old,new1);printf("%s",new1);}实验二序列密码实验学时:2学时实验类型:验证实验要求:必修一、实验目的编程实现序列密码RC4的加密方法。
密码学实验报告(AES,RSA)
![密码学实验报告(AES,RSA)](https://img.taocdn.com/s3/m/d8d5cefbaeaad1f346933f1e.png)
华北电力大学实验报告||实验名称现代密码学课程设计课程名称现代密码学||专业班级:学生姓名:学号:成绩:指导教师:实验日期:[综合实验一] 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}等。
现代密码学——古典密码算法(实验报告)
![现代密码学——古典密码算法(实验报告)](https://img.taocdn.com/s3/m/b57b4e9d172ded630a1cb636.png)
安全SnoWolF/百度B英俊制作课程名称现代密码学实验实验项目名称古典密码算法练习一 Caesar密码加密时每一个字母向前推移k位,例如当k=5时,置换表如表2所示。
表2 Caesar置换表于是对于明文:datasecurityhasevolvedrapidly经过加密后就可以得到密文:IFYFXJHZWNYDMFXJATQAJIWFUNIQD若令26个字母分别对应整数0~25,如表3所示。
表3 Caesar置换表则Caesar加密变换实际上是:c=(m+k)mod26其中m是明文对应的数据,c是与明文对应的密文数据,k是加密用的参数,也称为密钥。
很容易得到相应的Caesar解密变换是:m=D(c)=(c–k)mod26例如明文:datasecurity对应的数据序列:301901842201781924当k=5时经过加密变换得到密文序列:852452397252213243对应的密文为:IFYFXJHZWNYD【实验步骤】本练习主机A、B为一组,C、D为一组,E、F为一组。
首先使用“快照X”恢复Windows系统环境。
一.手动完成Caesar密码(1) 在实验原理部分我们已经了解了Caesar密码的基本原理,那么请同学们写出当密钥k=3时,对应明文:data security has evolved rapidly的密文: GDWD VHFXULWB KDV HYROYHG UDSLGOB 。
(2) 进入实验平台,单击工具栏中的“密码工具”按钮,启动密码工具,在向导区点击“Caesar密码”。
在明文输入区输入明文:data security has evolved rapidly。
将密钥k调节到3,查看相应的密文,并与你手动加密的密文进行比较。
请根据密钥验证密文与明文对应关系是否正确。
二.Caesar加密(1) 进入“加密解密”|“Caesar密码”视图,在明文输入区输入明文(明文应为英文),单击“加密”按钮进行加密。
现代密码学与加解密技术实验报告
![现代密码学与加解密技术实验报告](https://img.taocdn.com/s3/m/c1b091851ed9ad51f11df26f.png)
现代密码学与加解密技术实验一、实验教学目标与基本要求现代密码学与加解密技术实验是本课程重要的实践教学环节。
实验的目的不仅仅是验证理论知识,更重要的是通过实验加强学生的实验手段与实践技能,培养学生分析问题、解决问题、应用知识的能力和创新精神,全面提高学生的综合素质。
通过本实验简要了解密码学以及现代密码算法的基本知识,学会常用文件加密的实现、了解系统加密解密技术,具体掌握几种加解密方法。
实验后完成要求撰写实验报告,报告内容包括题目、测试数据、运行结果、遇到的问题和解决方法、关键代码或程序清单,学生可以在实验报告中提出对实验的建议和意见。
二、实验项目及教学安排三、实验成绩考核办法每次实验后,要求从以下几个方面书写实验报告:实验题目,程序清单,实验用数据及结果,学生可以在实验报告中提出对实验的建议和意见。
实验成绩满分100分,并按10%折算记入课程总成绩,实验成绩不合格者不得参加期末考试。
实验成绩按下面7条进行考核评定。
(1)做好实验内容的预习,写出预习报告;占10%。
(2)了解实验题目的调试方法;占10%。
(3)按实验要求预先设计好程序;占10%。
(4)认真记录实验数据并分析实验结果;占10%。
(5)实验后按要求书写实验报告,记录实验用数据及运行结果;占30%。
(6)创新能力强,在实验中设计的程序有一定的通用性,算法优化;20%。
(7)实验过程中,具有严谨的学习态度,认真、踏实、一丝不苟的科学作风;10%四、实验教材及参考书1.Richard J.Spillman:《CLASSICAL AND CONTEMPORARY CRYPTOLOGY》,清华大学出版社,2005-72.William Stallings: Cryptography and Network Security: Principles and Practice. 2nd ed. Prentice Hall, 1998.3.杨波著:《现代密码学》,清华大学出版社,2003-8.4.Wenbo Mao. Modern Cryptography: Theory and Practicce. 电子工业出版社,2004-7.5.许主洪著:《加密与解密-密码技术剖析与实战应用》,人民邮电出版社,2002-8.6.张焕国,刘玉珍著:《密码学引论》,武汉大学出版社,2003.7.段钢著:《加密与解密》,电子工业出版社,2005-3.五、实验内容与报告的要求实验1、2的内容要求(提示性的)与封面见附录一(打印时将“附录一”3个字去掉)。
中南大学 现代密码学实验报告
![中南大学 现代密码学实验报告](https://img.taocdn.com/s3/m/31f390066edb6f1aff001fd0.png)
中南大学现代密码学实验报告学生姓名郁博文学号0906130205专业班级信息安全1302指导教师段桂华学院信息科学与工程学院完成时间2015年5月AES1.背景AES,密码学中的高级加密标准(Advanced Encryption Stan dard,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为密钥长度除322.系统设计2.1系统主要目标基本要求部分:1.在深入理解AES加密/解密算法理论的基础上,设计一个AES加密/解密软件系统;2.2功能模块与系统结构主要功能模块如下:2.2.1字节替换SubByte非线性代换是可逆的,由以下两个变换的合成得到:① 首先,将字节看作GF(28)上的元素,映射到自己的乘法逆元,‘00’映射到自己。
现代密码学2
![现代密码学2](https://img.taocdn.com/s3/m/3980ac36376baf1ffc4fad5e.png)
《现代密码学》实验报告
四、实验结果及分析和(或)源程序调试过程
替代密码的实验结果为:
实验总结:在这次实验中,我是用了替代密码对明文进行加密和解密,这次我使用的是文件操作,从文件中读取明文到一个Vector中去,这样的优点是,vector不限定文件的大小,可以自动在vector后面继续添加,这样就解决了使用字符数组的缺陷。
对于明文的加密,我只对数字和英文字母进行处理对于其他的字符,我用空格来替代。
加密时,通过获取字符的ASCII码值,将其加上密钥的ASCII值,如果超界,我们将其mod 26对于数字,我们mod 10,最后回去。
这次实验中,我学会了简单的古典密码的加密和解密,通过C++实现,对古典密码进行了巩固和提高,加深了对他的理解。
现代密码学实验报告
![现代密码学实验报告](https://img.taocdn.com/s3/m/f033a75bda38376baf1faeee.png)
现代密码学实验报告学生姓名学号专业班级指导教师段桂华学院信息科学与工程学院完成时间2016年4月实验一密码算法实验[实验目的]1.掌握密码学中经典的对称密码算法AES、RC4的算法原理。
2.掌握AES、RC4的算法流程和实现方法。
[实验预备]1.AES算法的基本原理和特点。
2.流密码RC4的密钥流生成以及S盒初始化过程。
[实验容]1. 分析AES、RC4的实现过程。
2. 用程序设计语言将算法过程编程实现。
3. 完成字符串数据的加密运算和解密运算输入十六进制明文:900AABBCCDDEEFF输入十六进制密钥:13579BDF02468ACE1234567890ABCDEF[实验步骤]1. 预习AES、RC4算法。
2. 写出算法流程,用程序设计语言将算法过程编程实现。
3. 输入指定的明文、密钥进行实验,验证结果。
4. 自己选择不同的输入,记录输出结果。
AES算法流程图:读进明文读进密钥(1)产生轮子密钥(2)AddRoundKey变换(3)轮变换Round(State,RoundKey){ByteSub(State);ShiftRow(State);MixColumn(State);AddRoundKey(State,RoundKey);}(4)最后轮变换FinalRound(State,RoundKey){ByteSub(State)ShiftRow(State)AddRoundKey(State,RoundKey);}密文1rN 运行界面:RC4算法流程图:i=0;j=0;i=(i+1)%256j=(j+s[i])%256 交换Si,Sj;t=(s[i]+s[j])%256 k=St;初始化S盒并打印加密明文,并输出加密后的密文解密,并输出结束输入密钥输入明文开始运行界面:[问题讨论]1.改变明文或密钥中的一个比特值可能影响AES值中的多少比特?答:明文和密钥在S盒置换时,不同的字节会替换出不同的结果。
现代密码学实验报告
![现代密码学实验报告](https://img.taocdn.com/s3/m/380e3116ce84b9d528ea81c758f5f61fb7362825.png)
一、实验目的通过本次实验,了解现代密码学的基本原理和方法,掌握密码学在通信与网络安全中的应用,提高对密码算法的分析和设计能力。
二、实验内容1. 理解密码学的基本概念和原理;2. 掌握对称加密算法和非对称加密算法的基本原理;3. 实现DES、AES、RSA等常用密码算法;4. 分析和比较不同密码算法的性能;5. 设计简单的密码系统。
三、实验步骤1. 理解密码学的基本概念和原理密码学是研究保护信息安全的一门学科,主要包括加密、解密、认证和密钥管理等。
密码学的基本原理包括:保密性、完整性、可用性和抗抵赖性。
2. 掌握对称加密算法和非对称加密算法的基本原理(1)对称加密算法:加密和解密使用相同的密钥,如DES、AES等。
其优点是加密速度快,但密钥分发和管理困难。
(2)非对称加密算法:加密和解密使用不同的密钥,如RSA、ECC等。
其优点是密钥分发和管理简单,但加密速度较慢。
3. 实现DES、AES、RSA等常用密码算法(1)DES算法:本实验使用Python语言实现DES算法的加解密过程。
首先,构造DES密钥,然后对明文进行加密和解密。
(2)AES算法:本实验使用Python语言实现AES算法的加解密过程。
首先,构造AES密钥,然后对明文进行加密和解密。
(3)RSA算法:本实验使用Python语言实现RSA算法的加解密过程。
首先,生成公钥和私钥,然后使用公钥加密明文,使用私钥解密密文。
4. 分析和比较不同密码算法的性能通过对DES、AES、RSA等密码算法的实验,分析不同算法在加密速度、安全性、密钥长度等方面的差异,为实际应用提供参考。
5. 设计简单的密码系统结合所学知识,设计一个简单的密码系统,包括密钥生成、加密、解密和认证等功能。
四、实验结果与分析1. DES算法(1)加密速度:DES算法的加密速度较快,适合对速度要求较高的场合。
(2)安全性:DES算法的密钥长度为56位,相对较短,安全性较低。
2. AES算法(1)加密速度:AES算法的加密速度较快,适合对速度要求较高的场合。
RSA加密算法实验报告_2
![RSA加密算法实验报告_2](https://img.taocdn.com/s3/m/8ecda911f6ec4afe04a1b0717fd5360cba1a8d37.png)
现代密码学实验报告题目: RSA算法的实现过程
一、实验目的
二、简单实现RSA过程, 通过OpenSSL命令编辑器实现发送方对明文进行加
密, 签名, 接受方验证, 解密的简单过程。
三、实验原理
RSA加密算法的基本流程:
四、实验步骤
发送方对明文进行加密:
首先利用MD5对明文进行摘要操作:
然后生成秘钥文件:
再利用这个密钥对摘要进行加密:
然后对摘要进行签名操作:
发送方加密后要发送的东西是: 明文和摘要的签名传送到接收方后,接收方进行解密操作:
接收方进行验证:
通过比较可以发现所得摘要的结果是相同的, 则可以得到结论: 该明文没有被篡改。
五、实验心得
通过对RSA过程的简单模仿, 我们可以明白理论和现实是有一定差别的, 我们需要将明文利用MD5进行摘要处理, 然后在通过MD5对摘要进行验证, 从而判断密文是否经过修改, 达到数据的安全性, 完整性和保密性。
在使用OpenSSL进行RSA过程模仿时要注意文件名的对应, 这需要我们在命名文件时能做到见名之意, 方便我们后续的操作。
命令行的书写方式需要我们对字母有一定的敏感性, 经常会出现字母出现问题而导致错误的发生。
密码学实验报告
![密码学实验报告](https://img.taocdn.com/s3/m/e578da70ec630b1c59eef8c75fbfc77da26997a0.png)
一、实验目的1. 理解密码学的基本概念和原理。
2. 掌握常见的加密算法和解密算法。
3. 熟悉密码学的实际应用。
4. 培养实际操作能力和问题解决能力。
二、实验内容1. 古典密码学(1)单表替换密码实验内容:使用单表替换密码对一段明文进行加密和解密。
实验步骤:1)创建一个字符替换表;2)将明文中的每个字符替换为替换表中的对应字符;3)将替换后的字符拼接成密文;4)使用相同的替换表将密文解密,还原为明文。
(2)维吉尼亚密码实验内容:使用维吉尼亚密码对一段明文进行加密和解密。
实验步骤:1)确定密钥;2)按照密钥的长度将明文分成多个部分;3)对每个部分使用单表替换密码进行加密;4)将加密后的部分拼接成密文;5)使用相同的密钥和解密步骤将密文解密,还原为明文。
2. 现代密码学(1)DES加密算法实验内容:使用DES加密算法对一段明文进行加密和解密。
实验步骤:1)生成DES密钥;2)将明文分割成64位的数据块;3)对每个数据块进行加密,得到密文;4)使用相同的密钥和解密步骤将密文解密,还原为明文。
(2)AES加密算法实验内容:使用AES加密算法对一段明文进行加密和解密。
实验步骤:1)生成AES密钥;2)将明文分割成128位的数据块;3)对每个数据块进行加密,得到密文;4)使用相同的密钥和解密步骤将密文解密,还原为明文。
三、实验结果与分析1. 古典密码学实验结果单表替换密码和维吉尼亚密码的加密和解密效果良好,能够成功将明文加密为密文,再解密为明文。
2. 现代密码学实验结果DES和AES加密算法的加密和解密效果良好,能够成功将明文加密为密文,再解密为明文。
四、实验总结1. 通过本次实验,掌握了密码学的基本概念和原理。
2. 熟悉了常见的加密算法和解密算法,包括古典密码学和现代密码学。
3. 提高了实际操作能力和问题解决能力。
五、实验拓展1. 研究不同加密算法的优缺点,了解其在实际应用中的适用场景。
2. 学习更多密码学相关知识,如量子密码学、区块链密码学等。
现代密码学——DES算法(实验报告)
![现代密码学——DES算法(实验报告)](https://img.taocdn.com/s3/m/bddf1abada38376bae1fae33.png)
课程名称现代密码学实验实验项目名称 DES算法【实验目的】1.理解对称加密算法的原理和特点。
2.理解DES算法的加密原理。
【实验环境】1.实验人数:每组2人2.系统环境:Windows3.网络环境:交换网络结构4.实验工具:VC++6.0、密码工具【实验原理】一.对称密钥加密机制对称密钥加密机制即对称密码体系,也称为单钥密码体系和传统密码体系。
对称密码体系通常分为两大类,一类是分组密码(如DES、AES算法),另一类是序列密码(如RC4算法)。
对称密码体系加密和解密时所用的密钥是相同的或者是类似的,即由加密密钥可以很容易地推导出解密密钥,反之亦然。
同时在一个密码系统中,我们不能假定加密算法和解密算法是保密的,因此密钥必须保密。
发送信息的通道往往是不可靠的或者不安全的,所以在对称密码系统中,必须用不同于发送信息的另外一个安全信道来发送密钥。
图1描述了对称密码(传统密码)系统原理框架,其中M表示明文;C表示密文;E表示加密算法;D表示解密算法;K表示密钥;I表示密码分析员进行密码分析时掌握的相关信息;B表示密码分析员对明文M的分析和猜测。
图1 传统密码系统原理框架图对称密码体系的优点:●加密效率高,硬件实现可达每秒数百兆字节(软件实现略慢一些)。
●密钥相对比较短。
●可以用来构造各种密码机制。
●可以用来建造安全性更强的密码。
对称密码体系的缺点:●通信双方都要保持密钥的秘密性。
●在大型网络中,每个人需持有许多密钥。
●为了安全,需要经常更换密钥。
二.DES加密算法简介1973年5月15日,美国国家标准局在联邦注册报上发表一则启事,公开征集用来保护传输和静止存储的计算机数据的密码算法,这一举措最终导致了数据加密标准DES的出现。
DES采用分组乘积密码体制,它是由IBM开发的,是对早期Lucifer密码体制的改进。
DES 在1975年3月17日首次在联邦记录中公布,而且声明对此算法征求意见。
到1977年2月15日拟议中的DES被采纳为“非密级”应用的一个联邦标准。
密码学实验-实验1 凯撒密码与单表置换
![密码学实验-实验1 凯撒密码与单表置换](https://img.taocdn.com/s3/m/81d62417f46527d3240ce098.png)
ifkey.count(i) ==0:
AlphaBet1[k] = i
k +=1
#将key中重复的字母删除
chuli_key()
#将key加入到密码表中
add_key()
#判断字母大小写
foriinmiwen:
ifi.isspace() ==True:
mingwen = mingwen +' '
"J","K","L","M","N","O","P","Q","R",
"S","T","U","V","W","X","Y","Z"]
#小写字母表
alphaBet = ["a","b","c","d","e","f","g","h","i",
"j","k","l","m","n","o","p","q","r",
char f(int i)
{
for(int x=0;x<26;x++)
if(str_passtable[x]==(i+'a'))return (x+'a');
现代密码学实验报告.
![现代密码学实验报告.](https://img.taocdn.com/s3/m/63cfba2dee06eff9aef80726.png)
现代密码学实验报告学生姓名学号专业班级计算机科学与技术指导教师段桂华学院信息科学与工程学院完成时间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。
void Cipher(){int i,j,round=0;// 把明文赋值到状态数组中for(i=0;i<4;i++)for(j=0;j<4;j++)state[j][i] = in[i*4 + j];// 先与初始轮密钥相加AddRoundKey(0);// 第一轮至(Nr-1)轮的迭代运算,第Nr轮不用进行列混合运算for(round=1;round<Nr;round++){SubBytes(); //字节代换ShiftRows(); //行移位MixColumns(); //列混合AddRoundKey(round); //密钥加}SubBytes();ShiftRows();AddRoundKey(Nr);// 加密结束,将机密结果填入数组out中以便输出for(i=0;i<4;i++)for(j=0;j<4;j++)out[i*4+j]=state[j][i];}解密函数的流程和加密函数是一致的,只是对于行变换、列变换、以及相关s盒子为加密的逆过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.分析RSA、ECC的实现过程。
2.用程序设计语言将算法过程编程实现
3.完成数据的加密运算和解密运算
输入明文:security
输入密钥:cryption
对ASCII码进行加密和解密。
[实验步骤]
1.预习RSA、ECC算法。
2.了解大素数的生成、大数的运算、公钥、私钥的生成。
3.写出算法流程,用程序设计语言将算法过程编程实现。
2>由于字母无法进行指数运算,所以需要将字母通过ASCII码转换成数字,再进行指数运算,最后再将数字转化成字符输出。另由于素数检测函数用的是循环,其时间复杂度太高,如果输入的素数及公钥太大,会一直循环,时间花费太大,所以只能对小素数进行运算。
实验三 SKEY协议设计实验
[实验目的]
1.掌握身份认证协议的原理和基本思想。
回答问题
解:
1>该协议的安全性依赖于MD5算法的单向性,但是若密码简单,攻击者可以通过碰撞的方法有可能构造两个具有相同MD5的信息,也可通过大字典的方法破解MD5,将常用密码进行MD5后建立数据库,然后和MD5数值进行对比,通过这样的方法来“破解”MD5。
2>运行时将x[R]也打印出来了,这是不安全的,故mian函数里的打印循环程序需要更改。
RSA的安全性依赖于大素数n的因子分解难题,当n足够大时,可使n的分解无法在多项式时间内完成,因此p、q越大,安全性越高。
但是当用户密钥使用不当,或是攻击者获得e1、e2、n、c1、c2,共用模数n,根据c1=m^e1 mod n,c2=m^e2 mod n,若e1,e2互素,则有r*e1+s*e2=1,可以根据(c1^-1)^-r*(c2)^s=m^(r*e1+s*e2)=m mod n,从而得到明文m。RSA签名算法亦可根据其指数的特点进行攻击,一般攻击者是将某一信息做一下伪装(盲签名思想),再拥有私钥的实体签署,经过计算很容易得到攻击者所想要的信息。
3.写出算法流程,用程序设计语言将协议过程编程实现。
4.验证SKEY协议的身份鉴别过程。
写出所编写程序的流程图和运行界面、运行结果。
程序流程图:
不同
相同
是
否
每输入一次活动密钥就验证一次。
运行结果:
100个活动密钥:
输入第100个验证密钥:
[问题讨论]
1. 分析SKEY的安全性;
2. 分析实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。
[实验内容]
1.分析DES、AES、RC4、SHA的实现过程。
2.用程序设计语言将算法过程编程实现。
3.完成字符串数据的加密运算和解密运算
输入明文:Idolikethisbook
输入密钥:cryption
[实验步骤]
1.预习DES、AES、RC4算法。
2.写算法流程,用程序设计语言将算法过程编程实现。
实验二 公钥密码算法实验
[实验目的]
1.掌握密码学中常用的公钥密码算法RSA、ECC的算法原理。
2.掌握RSA、ECC的算法流程和实现方法。
[实验预备]
1.RSA和ECC密码系统所基于的数学难题是什么?
2.RSA和ECC算法的基本原理。
3.公钥密码系统可以取代对称密码系统吗?
4.RSA和ECC的实现过程。
K0K1 ... Kn-1 Kn
轮密钥加
字节代替
行移位
轮密钥加
字节代替
行移位
列混合
轮密钥加
字节代替
行移位
列混合
轮密钥加
明文
AES运行结果:
RC4流程图:
RC4运行结果:
[问题讨论]
1.在DES算法中有哪些是弱密钥?哪些是半弱密钥?
2.改变明文或密钥中的一个比特值可能影响AES值中的多少比特?
3.分析实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。
实验一 对称密码算法实验
[实验目的]
1.掌握密码学中经典的对称密码算法DES、AES、RC4的算法原理。
2.掌握DES、AES、RC4的算法流程和实现方法。
[实验预备]
1.DES算法有什么特点?算法中的哪些结构保证了其混淆和扩散的特性?
2.AES算法的基本原理和特点。
3.流密码RC4的密钥流生成以及S盒初始化过程。
3.输入指定的明文、密钥进行实验,验证结果。
4.自己选择不同的输入,记录输出结果。
写出所编写程序的流程图和运行界面、运行结果。
DES程序流程图:
⊕
DES运行结果:
AES程序流程图:
轮密钥加
逆字节代替
逆行移位
逆列混合
轮密钥加
逆字节代替
逆行移位
轮密钥加
逆列混合
轮密钥加
逆字节代替
逆行移位
明文
K0 K1 ... Kn-1 Kn
2.掌握SKEY协议的机制和实现方法。
[实验预备]
1.SKEY协议的作用。
2.SKEY协议的安全性分析。
3.SKEY协议的实现过程。
[实验内容]
1.分析SKEY协议的实现过程。
2.用程序设计语言将算法过程编程实现。
3. 演示SKEY协议的身份鉴别过程。
[实验步骤]
1.预习SKEY协议的机制。
2.选择和实现相应的摘要算法MD5或SHA。
4.输入指定的明文和密钥进行实验,验证结果。
写出所编写程序的流程图和运行界面、运行结果。
程序流程图:
N
Y
N
Y法的特点,分析算法的安全性;
2. 分析实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。
回答问题
解:
1>RSA是第一个既能用于数据加密,也能用于数字签名的算法,它易于理解和操作,因而很流行。
回答问题
解: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型数据不能直接从键盘输入,且最后也要转换存储在char型数组中,但是都有各种问题,最后,直接定义char型数组,再直接向其中输入数据。
编译时出现LNK2005错误,选择VC菜单Project->Setting->Link->Catagory,选择Input,再在Ignorelibraries的Edit栏中填入需要忽略的库,然后在Object/library Modules的Edit栏中填入正确的库的顺序。