当前位置:文档之家› 计算机密码学上机作业08级

计算机密码学上机作业08级

11/12(1)现代密码学上机作业
第一题:用kaiser密码获得秘文kddkmu,试所有可能解密它#include<iostream.h>
void main(){int i,c,k;
const int size=100; char aa[size];
cout<<"请输入秘文:";
cin.getline(aa,size);
for(k=0;k<26;k++)
{for(i=0;aa[i];i++)
{
c=((int)aa[i]-97)-k;
if(c<0)
c=(26+c)+97;
else
c=c%26+97;
aa[i]=(char)c;
}for(i=0;aa[i];i++)
cout<<aa[i]<<endl;
}
}
运行:请输入秘文:kddkmu
attack
第二题:求解x=2mod78;x=5mod97;x=1mod119
#include<iostream.h>
void main(){
int i,x;int a1=2,a2=5,a3=1;
int b1=78,b2=97,b3=119;int M,m1,m2,m3;
int y1,y2,y3;M=b1*b2*b3;
m1=b2*b3;m2=b1*b3;m3=b1*b2;
for(i=0;i<b1;i++)
if(m1*i%b1==1)
y1=i;
for(i=0;i<b2;i++)
if(m2*i%b2==1)
y2=i;
for(i=0;i<b3;i++)
if(m3*i%b3==1)
y3=i;
x=(a1*m1*y1+a2*m2*y2+a3*m3*y3)%M;
cout<<"联合同余方程:"<<endl;
cout<<"x=2mod78"<<endl;
cout<<"x=5mod97"<<endl;
cout<<"x=1mod119"<<endl;
cout<<"它的解x="<<x<<endl;
}
运行:联合同余方程:
=2mod78
=5mod97
=1mod119
它的解x=647480
第三题:用仿射变换函数7x+8加密明文cleopatra #include<iostream.h>
void main(){
int c,k1,k2,i;
const int size=100;
char a[size];
cout<<"请输入明文:";
cin.getline(a,size);
cout<<"请输入k1:";
cin>>k1;
cout<<"请输入k2:";
cin>>k2;
for(i=0;a[i];i++)
{
c=((((int)a[i])-97)*k1+k2)%26+97;
a[i]=(char)c;
}
for(i=0;a[i];i++)
cout<<a[i]<< endl;
}
请输入明文:cleopatra
请输入k1:7
请输入k2:8
运行:whkcjilxi。

相关主题