⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vigenere_cpp

📁 vigenere加密算法实现(VC++)实现
💻
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0051)http://210.40.7.141/study/cryptology/1/vigenere.cpp -->
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2900.3020" name=GENERATOR></HEAD>
<BODY><PRE>//c语言实现古典加密算法Vigenere算法
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;iostream.h&gt;

#define SHIFT 10;//除英文字符外其他字符的ASCII码移位数

//函数声明
void init(char * filename,char *o_filename,char * key,int *text_len,int *key_len,int *select);//初始化
void encrypt(char *filename,char *result,char *key,int text_len,int key_len);//加密函数
void decrypt(char *filename,char *result,char *key,int text_len,int key_len);//解密函数
void output(char *result,char *o_filename,int text_len);//输出结果到文件

void  main()
{   while(1){
    char filename[50]="";//存放文本文件名
	char o_filename[50]="";//存放输出文件名
	char key[50]="";//存放密钥
    int  text_len=0;//文件内容的长度
	int  key_len=0;//密钥的长度
	int  select=1;
    init(filename,o_filename,key,&amp;text_len,&amp;key_len,&amp;select);
	char *result=new char[text_len];
	if(select==1)
		encrypt(filename,result,key,text_len,key_len);	
	else
		decrypt(filename,result,key,text_len,key_len); 
	output(result,o_filename,text_len);
	}
}

void init(char *filename,char *o_filename,char *key,int *text_len,int *key_len,int *select)
{	
	system("cls");//清屏
	printf("\n\n\n\t\t Vigenere加解密算法的C语言实现!作者:郭志勇"); 
	printf("\n\n\n\t\t\t选择您要进行的操作");
	printf("\n\n\n\t\t\t1-加密 2-解密 3-退出\n");	
	scanf("%d",select);
	if(*select==3)exit(0);
	printf("请输入需要%s的文件名:\n",(*select==1?"加密":"解密"));	
	scanf("%s",filename);
	printf("请输入结果输出文件名:\n");
	scanf("%s",o_filename);
	printf("请输入密钥:\n");
	scanf("%s",key); 
	*key_len=strlen(key);
	for(int i=0;i&lt;(*key_len);i++)
	{
		if(key[i]&gt;='A'&amp;&amp;key[i]&lt;='Z')//如果key某位字符为大写,转换成小写
			key[i]+=32;
	}
	FILE *fp;
	if ((fp = fopen(filename, "r"))==NULL)//打开文件
		printf("打开文件错误");
	else{ 
	   while(!feof(fp))//计算文本长度
	   {
		   fgetc(fp);
		   (*text_len)++;
	   }
	   (*text_len)--;
       fclose(fp);
	}
}
 
//加密函数
void  encrypt(char *filename,char *result,char *key,int text_len,int key_len)
{ 	
	char c;
	FILE *fp;
	if ((fp = fopen(filename, "r"))==NULL)//打开文件
		printf("打开文件错误");
	else
	{	   
	   int k=0;	   
	   int step=(text_len%key_len==0)?(text_len/key_len):(text_len/key_len+1);
	   rewind(fp);
	   for(int i=0;i&lt;step;i++)
	   {
		   for(int j=0;j&lt;key_len&amp;&amp;!feof(fp);j++,k++)
		   {
			   c=fgetc(fp);
			   if(c&gt;='A'&amp;&amp;c&lt;='Z'){
				   result[k]=((c-65)+(key[j]-97))%26+65+32;//加减32的目的是变换大小写
			   }
			   else if(c&gt;='a'&amp;&amp;c&lt;='z')
				   result[k]=((c-97)+(key[j]-97))%26+97-32; 
			   else 
				   result[k]=c+SHIFT;
		   }
	   }
	   fclose(fp);
	}
}

//解密函数
void decrypt(char *filename,char * result,char *key,int text_len,int key_len)
{ 	char c;
	FILE *fp;
	if ((fp = fopen(filename, "r"))==NULL)//打开文件
		printf("打开文件错误");
	else
	{	   
	   int k=0;
	   int step=(text_len%key_len==0)?(text_len/key_len):(text_len/key_len+1);
	   rewind(fp);
	   for(int i=0;i&lt;step;i++)
	   {
		   for(int j=0;j&lt;key_len&amp;&amp;!feof(fp);j++,k++)
		   {
			   c=fgetc(fp);
			   if(c&gt;='A'&amp;&amp;c&lt;='Z'){
				   for(result[k]='Z';result[k]&gt;='A';result[k]--)
					   if((((result[k]-65)+(key[j]-97))%26+65)==c){
						   result[k]+=32;//变换大小写
						   break;			   
					   }
			   }
			   else if(c&gt;='a'&amp;&amp;c&lt;='z'){
				   for(result[k]='z';result[k]&gt;='a';result[k]--)
					   if((((result[k]-97)+(key[j]-97))%26+97)==c)
					   {
						   result[k]-=32;//变换大小写
						   break;
					   }
			   }
			   else 
				   result[k]=c-SHIFT;
		   }
	   }
	   fclose(fp);
	}
}

//输出结果到文件
void output(char *result,char *o_filename,int text_len)
{
    FILE *fp;
	if ((fp = fopen(o_filename, "w"))==NULL)//打开文件
		printf("打开文件错误");
	else
	{
	    for(int i=0;i&lt;text_len;i++)
		   fputc(result[i],fp);
	    fclose(fp);
	}
}

</PRE></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -