- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验一密码学基本算法的实现一
PAGE
PAGE 9
上机实验报告(一)
实验课程:应用密码学 实验时间:2013年9月26日
任课教师:刘光军
班级:11级信息与计算科学专业1班 姓名:刘静 学号:0202110123一、实验名称: 密码学基本算法的实现(一)二、实验目的
学习常见的古典密码学算法,通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。三、实验要求
1、在D盘建立一个自己的文件夹;
2、开启软件平台—Visual C++6.0,在此环境下进行编程实验;
3、将题目、你输入的命令、程序及运行结果保存在word文件中,作为作业提交;
4、若出现错误,修改、运行直到输出正确结果。四、报告正文(文档,数据,模型,程序,图形)
1、编写程序实现仿射加密和Playfair密码。通过讨论分析单表代替密码和多表代替密码算法的功能需求,详细设计实现代替密码算法的数据结构和流程,给出测试用例和测试步骤,得出测试和结论。算法的实现程序必须提供加密和解密两个接口:int?encrypt()和int?decrypt()。当加密或者解密成功时返回CRYPT_OK,失败时返回CRYPT_ERROR。
/**********加密的实现**********/
#include stdlib.h
#include stdio.h
#include string.h
char book[5][5]={ }; //密码本.设为全局变量.
/******************************
*查找在密码本中的位置。
*******************************/
int findlocation(char m,int *t)
{
int i,j;
int temp; //表示行数.
for(i=0;i5;i++)
for(j=0;j5;j++)
if(m==book[i][j])
{
*t=j;
temp=i;
i=5; //不必再循环。
j=5;
}
return temp; //返回行数。
}
/*************************
*密码输出函数
**************************/
void out_put(int s0,int t0,int s1,int t1)
{
char c[2]={ };
if(s0==s1) //同一行。
{
c[0]=book[s0][(t0+1)%5];
c[1]=book[s0][(t1+1)%5];
}
else if(t0==t1) //同一列.
{
c[0]=book[(s0+1)%5][t0];
c[1]=book[(s1+1)%5][t0];
}
else //不同行不同列.
{
c[0]=book[s0][t1];
c[1]=book[s1][t0];
}
printf(%c,c[0]); //输出已加密的两个字符.
printf(%c,c[1]);
}
/********************************
*对明文加密.
*********************************/
void Encrypt()
{
char m[2]={ }; //明文数组.
char temp,ch;
char flag1,flag2; //用来标志上一轮中处理的第二个字母,提高解密精度.
int s0,t0,s1,t1,i; //两个字符的位置参数.
temp= ; //初始化为空字符.
i=0; //控制变量.
flag1=m[1]; //初始化.
while((ch=getchar())!=\n)
{
if(ch== ) //如果输入的是空格跳过去.
continue;
if(ch==j) //如果输入的是j则当作i处理.
ch=i;
m[i++]=ch; //赋入数组.
if(temp!= ) //如果上一步操作中有两个相同的字母.
{
m[1]=m[0];
m[0]=temp;
temp= ;
i=2; //标志变量,不必再输入下一个.
}
if(i!=2) //数组赋满,则跳过.
continue;
i=0;
i
文档评论(0)