Vigenere加密解密C++实现
来源:互联网 发布:阿里云建个人博客 编辑:程序博客网 时间:2024/04/28 19:49
#include <iostream>
#include <string>
using namespace std;
const int N=26;
char v[N][N]={{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}};
int number(char x)//把行号字母对应到数字
{
char y='a';
for(int i=0;i<N;i++)
{
if(x==(y+i)) return i;
}
}
void encryption(string m,string k)//加密
{
cout<<"明文:";
cin>>m;
cout<<"密钥:";
cin>>k;
int mlen,klen;
mlen=m.length();
klen=k.length();
char *p,*q,*t;//明文,初始密钥,密钥串。把string换成char
p=new char[m.length()+1];
strcpy(p,m.c_str());
q=new char[k.length()+1];
strcpy(q,k.c_str());
t=new char[m.length()+1];
int j=0;
for(int i=0;i<mlen;i++)
{
t[i]=q[j];
j++;
j=j%klen;
}//生成密钥
cout<<"密文:";
for(i=0;i<mlen;i++)
cout<<v[number(t[i])][number(p[i])];
cout<<endl;
}
void disencryption(string c,string k)//解密
{
cout<<"密文:";
cin>>c;
cout<<"密钥:";
cin>>k;
int clen,klen;
clen=c.length();
klen=k.length();
char *p,*q,*t;//密文,初始密钥,密钥串。把string换成char
p=new char[c.length()+1];
strcpy(p,c.c_str());
q=new char[k.length()+1];
strcpy(q,k.c_str());
t=new char[c.length()+1];
int j=0;
for(int i=0;i<clen;i++)
{
t[i]=q[j];
j++;
j=j%klen;
}//生成密钥
cout<<"明文:";
for(i=0;i<clen;i++)
for(int j=0;j<N;j++)
if(v[number(t[i])][j]==p[i]) {cout<<char(j+97);break;}
cout<<endl;
}
int main()
{
for(int i=1;i<N;i++)
{
for(int j=0;j<N;j++)
{
v[i][j]=v[i-1][(j+1)%N];
}//方阵初始化
}
cout<<"欢迎使用维吉尼亚加密!"<<endl<<endl;
cout<<"请选择要进行的操作"<<endl;
int flag;
do{
cout<<"1.加密2.解密3.结束:";
cin>>flag;
string m,k;
if(flag==1)encryption(m,k);
else if(flag==2) disencryption(m,k);
else if(flag!=1&&flag!=2&&flag!=3) cout<<"输入错误,请重新输入!";
}while(flag!=3);
return 0;
}
- Vigenere加密解密C++实现
- Vigenere密码加密解密原理
- 多码加密 vigenere算法 python 实现
- 多码加密 vigenere算法 python 实现
- 古典密码中的Vigenere加密方法的解密实例
- 用C#实现Des加密和解密
- 用C#实现Des加密和解密
- C#实现Des加密和解密
- 用C#实现Des加密和解密
- 用C#实现Des加密和解密
- C语言实现简单文件加密解密
- C语言实现文件加密解密
- C语言实现AES加密解密
- Vigenere加密法C++
- Vigenere加密问题
- 加密解密类(C#)
- C#DES加密解密
- C#MD5加密解密
- Joomla 1.5架构(五) connector包
- 最大子字段和问题求解C++代码
- 单sim卡保存收件箱的短信到系统盘中
- Joomla 1.5架构(五) Database包
- Android Display System --- Surface Flinger 收藏
- Vigenere加密解密C++实现
- win7下在注册表中为程序增加快捷命令
- Ubuntu操作系统使用实用教程
- 标准C++类std::string的内存共享和Copy-On-Write技术
- IBM/AIX下找到占用指定端口的进程并杀死它
- 6.28攻击新浪微博的XSS代码
- ctags 的使用及相关参数介绍(转载)
- .net自带 SQL Server 2005 Express使用
- ACM培训计划与我推荐的书籍