实验目的与意义
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 {