实验目的与意义

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、实验目的与意义

1、实验目的:

通过编程实现vigenere加密,更加深入的了解其原理,掌握vigenere算法。

2、实验意义:

验证理论知识,更重要的是通过实验加强实验手段与实践技能,培养分析问题、解决问题、应用知识的能力和创新精神,全面提高综合素质。

二、实验环境

操作系统:Windows XP

调试软件名称:Microsoft Visual studio

版本号:2005

上机地点:综合楼208

三、实验的预习内容

1、预习内容:

1、vigenere cipher加密规则:

1)找到一个关键字作为密钥;

2)将关键字重复的写在明文上;

3)根据vigenere table 找出对应的密文

2、解密:

1)根据vigenere table找到中对应的字母;

2)再看密文字母对应的关键字字母;

3)唯一的确定明文字母。

3、关键的代码(如何让3个字母实现类似vigenere table的形式)#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])

{

char a[3]={'a','b','c'};

char table[3][3];

for(int i=0;i<3;i++)

for(int j=0;j<3;j++)

table[i][j]=a[(j+i)%3];

for(int i=0;i<3;i++)

{for(int j=0;j<3;j++)

{printf("%c",table[i][j]);

}

printf("\n");}

return 0;

}

2、实验思路:

打出vigenere table->输入关键字->用户输入明文->进行加密>得到密文;

解密原理与加密基本相同。

3、程序框图:

四、实验的步骤与调试方法

1、实验步骤:

(1)建立win32 console applicationg工作空间,名为:

vigenere_20083612;

(2)新建xuvi.cpp源文件;

(3)按照实验思路编写源代码,完成之后进行编译、链接、执行;

(4)程序执行时按提示输入关键字、明文,验证输出密文,及解密之后输出明文是否正确。

2、调试方法:打表时出现错误。经调整后发现是数组定义问题。

五、实验数据与实验结果

六、实验用程序清单(要有注释)

#include "Stdio.h"

#include "Conio.h"

#include "string.h"

#include "malloc.h"

#define MAX 100

static int square[27][27];

char * vigenere(char key[],char word[]);

char * anti_vigenere(char key[],char * en_word);

int main(void)

{

char key[MAX],word[MAX], *en_word;

int i,j,k,m;

/*初始化vigenere方阵*/

for(i=1;i<27;i++){

for(j=1;j<27;j++){

square[i][j]=63+i+j;

if(square[i][j]>90)

square[i][j]=square[i][j]-26;

}

}

for(k=1;k<27;k++){

for(m=1;m<27;m++){

printf("%c ",square[k][m]);

}

printf("\n");

}

/**/

printf("Vigenere Cipher \nPlease input plain text:");

scanf("%s",word);

printf("input the key:");

scanf("%s",key);

en_word=vigenere(key,word);

printf("\nThe result is: %s\n",en_word);

printf("\n\tDecryption:\n");

printf("The plain text is:%s\n",anti_vigenere(key,en_word));

getch();

return 0;

}

/*加密算法*/

char * vigenere(char key[],char word[]){

char *text=(char *)malloc(MAX*sizeof(char));

int key_length=strlen(key);

int word_length=strlen(word);

int i,j,c;

for(i=0;i

if((word[i]>=65&&word[i]<=90)||(word[i]>=97&&word[i]<=122)){ if(word[i]>=97&&word[i]<=122){

c=word[i]-96;

}

else {

相关文档
最新文档