📄
字号:
密码学程序设计---仿设密码
#include <iostream.h>
#define error 0
#define ok 1
int streaminput(char* &c,int &length) //明文串输入
{
int i;
cout<<"请输入明文的长度:"<<endl;
cin>>length;
c=new char [length];
cout<<"请输入明文:"<<endl;
for(i=0;i<length;i++) cin>>c;
return ok;
}
int streamoutput(char* c,int length) //密文串输出
{
int i;
for(i=0;i<length;i++) cout<<c;
cout<<endl;
return ok;
}
int gcd(int x) //判断系数是否与26互质
{
int result=0, i;
for(i=2;i<=x;i++)
{
if((x%i==0)&&(26%i==0))
result++;
}
if(result==0) return ok;
else return error;
}
int EK(char* c1,char* &c2,int length) //加密函数
{
int a, b, i;
cout<<"请输入加密函数系数A:"<<endl;
cin>>a;
cout<<"请输入加密函数系数B:"<<endl;
cin>>b;
if(gcd(a)==1)
{
c2=new char[length];
for(i=0;i<length;i++)
{
c2=char((a*((int)c1-97)+b)%26+97); //负数mod 26结果为负数
}
return ok;
}
else return error;
}
int DK(char* c1,char* &c2,int length) //解密函数
{
int a, b, i=2, Da;
cout<<"请再次输入加密函数系数A:"<<endl;
cin>>a;
cout<<"请再次输入加密函数系数B:"<<endl;
cin>>b;
for(i=2;i<26;i++)
{ if((i*a-1)%26==0) Da=i;} //DK(y)=Da*(y-b)
c2=new char[length];
for(i=0;i<length;i++)
{
cout<<"test!!!!!!!!"<<(Da*((int)c1-97-b))%26+97<<endl;
c2=(char) ((Da*((int)c1-97-b))%26+97);
}
return ok;
}
void main()
{
char* c1;
char* c2;
char* c3;
int length;
cout<<"明文加密:"<<endl;
streaminput(c1,length);
EK(c1,c2,length);
cout<<"加密后的密文:"<<endl;
streamoutput(c2,length);
cout<<"密文解密:"<<endl;
DK(c2,c3,length);
cout<<"解密后的明文:"<<endl;
streamoutput(c3,length);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -