资源简介

C语言实现凯撒和维吉尼亚附带密钥的加解密,是计算机网络与信息安全大作业

资源截图

代码片段和文件信息

#include  
#include 
#include  
#include  
#include  
#include 
#include
using namespace std;
void Shift() /*移位密码*/ 

char c[100]; 
int length i=0 key=0; 
////clrscr(); 
    
printf(“********使用凯撒加密********\n请输入要加密内容:\n “); 
cin >> c; 
printf(“********使用凯撒加密********\n请输入你的密钥(必须是整数):\n “); 
scanf(“%d“&key);
length = strlen(c); 
for(i=0; i
if(c[i]>=‘A‘&&c[i]<=‘Z‘) 
c[i] = (c[i]+key-‘A‘)%26+‘A‘; 
else if(c[i]>=‘a‘&&c[i]<=‘z‘) 
c[i] = (c[i]+key-‘a‘)%26+‘a‘; 

printf(“密文: %s\n“ c); 
printf(“按任意键返回\n“); 
getch(); 


int gcd(int a int b) /*辗转相除法求ab的最大公因数*/ 

int k = 0; 

do 

k = a%b; 
a = b; 
b = k; 
}while(k!=0); 
return a; 


int Ni(int a int b) /*求a相对于b的逆*/ 

int i = 0; 
while(a*(++i)%b!=1); 
return i; 


void DeShift() /*凯撒密码解密*/ 

char c[100]; 
int length i=0 key=7; 
////clrscr(); 

printf(“********使用凯撒解密********\n请输入要解密内容:\n“); 
cin >> c; 
printf(“密文: %s\n“ c); 
printf(“********使用凯撒解密********\n请输入你的密钥(必须是整数):\n“); 
scanf(“%d“&key);
length = strlen(c); 
for(i=0; i
if(c[i]>=‘A‘&&c[i]<=‘Z‘) 
c[i] = (c[i]-key+26-‘A‘)%26+‘A‘; 
else if(c[i]>=‘a‘&&c[i]<=‘z‘) 
c[i] = (c[i]-key+26-‘a‘)%26+‘a‘; 

printf(“明文: %s\n“ c); 
printf(“按任意键返回...\n“); 
getch(); 


void Vigenere() /*维吉利亚密码*/ 

    const int M=30;
    int m=0n=0;
    char p[M];
    char k[M];
    char c[M];

cout<<“********维吉利亚加密********\n请输入要加密内容:(按#号结束):“<         int i=0;
         cin>>p[i];
         for(i=1;i                     m++;
                     cin>>p[i];}
         
          int plen=i-1; 
      cout<<“key:(按#号结束):“<        i=0;
         cin>>k[i];
        
        for(i=1;i                     n++;
                     cin>>k[i];} 
int pwlen=i-1;
   cout<<“密文:“<   for(int i=0j=0;i j=i%pwlen;                     
      if(p[i]==‘ ‘){
       i++;
       m--;
        continue;}
      else{
         if(p[i]>=‘A‘&

评论

共有 条评论