• 大小: 3KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-07-05
  • 语言: C/C++
  • 标签: 维吉尼亚  

资源简介

在单一恺撒密码的基础上,法国外交家布莱斯·德·维吉尼亚(Blaise de Vigenère)发明了一种方法来对同一条信息中的不同字母用不同的密码进行加密。这样,同样的E在一个位置可能被M所取代,而在另一个位置的E则有可能以K的面目出现。这样,就可以防止任何人利用频率分析法解密该条信息。

资源截图

代码片段和文件信息

在单一恺撒密码的基础上,法国外交家布莱斯·德·维吉尼亚(Blaise de Vigenère)发明了一种方法来对同一条信息中的不同字母用不同的密码进行加密。这样,同样的E在一个位置可能被M所取代,而在另一个位置的E则有可能以K的面目出现。这样,就可以防止任何人利用频率分析法解密该条信息。
#include 
#include
void encryption();
void decryption();
void encryption()
{
 
  int ij;
  char p[80]k[80]c[80];
  printf(“请输入明文:\n“);
   gets(p);
 
  printf(“请输入密钥(范围为a-zA-Z):\n“);
  gets(k);
  for(i=0;k[i]!=‘\0‘;i++)
  while((k[i]<‘a‘||k[i]>‘z‘)&&(k[i]<‘A‘||k[i]>‘Z‘))
  {
 
      printf(“您的输入有误,请重新输入密钥:\n“);
      gets(k);
   
}
 
   for(i=0j=0;p[i]!=‘\0‘&&k[j]!=‘\0‘;i++j++)
   if((p[i]<‘a‘||p[i]>‘z‘)&&(p[i]<‘A‘||p[i]>‘Z‘))
   {
c[i]=p[i];
}
 
   else
   {
 
     if(p[i]>=‘A‘&&p[i]<=‘Z‘)
     {
p[i]+=32; 
}
     if(k[j]>=‘A‘&&k[j]<=‘Z‘)
     {
k[j]+=32; 
}
     c[i]=(k[j]-‘a‘+(p[i]-‘a‘))%26+‘a‘-32;
    
}
   while(k[j]==‘\0‘)
   {
 
     for(ij=0;p[i]!=‘\0‘&&k[j]!=‘\0‘;i++j++)
     if((p[i]<‘a‘||p[i]>‘z‘)&&(p[i]<‘A‘||p[i]>‘Z‘))
     {
c[i]=p[i];
}
     else
     {
 
       if(p[i]>=‘A‘&&p[i]<=‘Z‘)
       {
p[i]+=32; 
}
        if(k[j]>=‘A‘&&k[j]<=‘Z‘)
        {
k[j]+=32; 
}
        c[i]=(k[j]-‘a‘+(p[i]-‘a‘))%26+‘a‘-32;
      
}
    
}
   c[i]=‘\0‘;
   printf(“使用vigenere密码加密后的密文为:\n“);
   puts(c);
 
}

void decryption

评论

共有 条评论