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

📄 vigenere.cpp

📁 维吉尼亚密码算法
💻 CPP
字号:
// Vigenere.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

/*维吉尼亚密码的C语言源代码 
设m表示明文序列,k表示密钥序列,c表示加密后的密文序列,d表示密钥长度,q表示明文/密文空间元素个数,则维吉尼亚密码可以描述为

  ci+td=(mi+td+ki) mod q    (i=0,1,2,...,d-1)
*/

#include <ctype.h>
#include <conio.h>
#include <string.h>
#include <iostream.h> 

void crypt(char m[],char k[],char r[])
{
	int i,j,s=0;
	j=strlen(k);
	for(i=0;m[i];i++)
		m[i]=tolower(m[i]);
	
	for(i=0;k[i];i++)
		k[i]=tolower(k[i]);
	for(i=0;m[i];i++)
		if(isalpha(m[i]))
		{
			r[i]=(m[i]-'a'+k[s%j]-'a')%26+'a';
			s++;/*s用来跳过明文中的空格字符*/
		}
		else
			r[i]=m[i];
		r[i]=0;/*密文字符串结束符*/
		//  for(i=0;r[i];i++)
		//     r[i]=toupper(r[i]);
}

void decrypt(char c[],char k[],char m[])
{
	int i,j,s=0;
	j=strlen(k);
	for(i=0;c[i];i++)
		c[i]=tolower(c[i]);
	for(i=0;k[i];i++)
		k[i]=tolower(k[i]);
	for(i=0;c[i];i++)
		if(isalpha(c[i]))
		{
			m[i]=(c[i]-k[s%j]+26)%26+'a';
			s++;
		}
		else
			m[i]=c[i];
		m[i]=0;
}

void main(int argc, char *argv[])
{
    char m[]="hello world";
	
	char ascii[]="abcdefghijklmnopqrstuvwxyz";
	char plaintext[]="abcdefghijklmnopqrstuvwxyz";
	char ciphertext[100]={0};
	printf("古典密码算法演示程序(谭文学2006年3月。)");
	//	for(int i=0;i<strlen(ascii);i++) printf("%c;", ascii[i]);
	int i(0);
	int key=26+2;
	
	char command;
	/*		char command;
	if (argc < 2)
	command = 'h';
	else
	command = argv[1][0];
	*/
	printf("\n");
	cout <<"输入k:启动凯撒加密!\n";
	cout <<"输入v:启动维吉尼亚加密!\n";
	cout <<"输入h:获得命令帮助!\n";
	cout <<"输入e:退出程序!\n";
	cout <<"请输入指令:";
loop:
	
	cin >> command;
	switch (command)
	{
	case 'k':
		{
			
			cout << "input key: ";
			cin >> key;
			cout << "\ninput plaintext: ";
			cin >> plaintext;				
			printf("\n密钥:%d",key);
			printf("\n加密得到密文:\n");
			for(i=0;i<strlen(plaintext);i++) printf("%c;",ciphertext[i]=(plaintext[i]-'a'+key)%26+'a');
			printf("\n解密得到明文:\n");
			for(i=0;i<strlen(plaintext);i++) printf("%c;",(26+(ciphertext[i]-'a'-key)%26)%26+'a');
			printf("\n");
			goto loop;
		}
	case 'v':
		{
			char k[]="best";
			cout <<"\ninput plaintext: ";
			cin >> m;				
			char c[80];
			char d[80];
			//   clrscr();
			crypt(m,k,c);
			decrypt(c,k,d);
			puts(m);
			puts(k);
			puts(c);
			puts(d);
			goto loop;
		}
		
	case 'e':
		{
			return;
		}
		
	case 'h': ;
		
			  {
				  cout << "输入k:启动凯撒加密!\n";
				  cout << "输入v:启动维吉尼亚加密!\n";
				  cout << "输入h:获得命令帮助!\n";
				  cout << "输入e:退出程序!\n";
				  goto loop;
			  }
	default:goto loop;
	}
		
}

⌨️ 快捷键说明

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