这是我用C++写的加密程序 我是菜鸟刚学实在是找不出错误!请高手帮我改改!

#include<iostream>#include<string>usingnamespacestd;intk1,k2,tmp,length;//-----------... #include <iostream>
#include <string>
using namespace std;
int k1,k2,tmp,length;

//----------------------------------------------------------
int gcd(int a,int b) // 求a和b的最大公约数
{
if(b==0)
return a;
else
return gcd(b,a%b);
}
int Ni(int a, int b) /*求a相对于b的逆*/
{
int i = 0;
while(a*(++i)%b!=1);
return i;
}
//----------------------------------------------------------
string encyption(string& str){

string result(str);
for(int i=0;i<length;i++){
if(result[i]>96&&result[i]<123)
result[i] = (k1*(result[i]-97)+k2)%26+65;
else if(result[i]>64&&result[i]<91)
result[i] = (k1*(result[i]-65)+k2)%26+65;
}
return result;
}//----------------------------------------------------------
string deccryption(string& str){

string result(str);

for(int i=0;i<length;i++){
if(result[i]>64&&result[i]<91)
{
tmp = Ni(k1,26)*((result[i]-65)-k2);
if(tmp<0)
result[i] = tmp%26+26+97;
else
result[i] = tmp%26+97;
}
}
return result;
}
//-------------------------------------------------------------
void main(){
string s;
string deccryption(string& str);
string encryption(string& str);
cout<<"请输入密钥k1,k2:";
cin>>k1>>k2;
if(gcd(k1,26)!=1)
cout<<"密钥错误!"<<endl;
cout<<"请输入要加密的明文:";
getline(cin,s);
length=s.length();
string t=encryption(s);
cout<< "加密后的密文:"<<t<<endl;
cout<<(s==deccryption(t) ? s+"\n":"加密失败!\n");
}
展开
 我来答
斐兹骏骑
2011-03-09
知道答主
回答量:24
采纳率:0%
帮助的人:17.1万
展开全部
主函数中,string s下面两行声明去掉,要么放到函数外面进行声明。
encyption函数拼写错了
逻辑没看,语法错误就这些,改掉就通了。
apctdd
2011-03-10
知道答主
回答量:20
采纳率:0%
帮助的人:0
展开全部
#include <math.h>
void crypt();
void decrypt();
void count();

int main()
{
int x;
loop:
printf("choose:\n1:jiami!\n2:jiemi!\n3:wumafenxi!\n4:tuichu!\n");
scanf("%d",&x);
if(x==1)
crypt();
else if(x==2)
decrypt();
else if(x==3)
count();
else if(x==4)
return 0; ////exit(0);
else
{ printf("Error!\n");
goto loop;//main();
}
goto loop;//main();
}
void crypt() /*******加密程序*****/
{
FILE *pt,*ct;
char key,infile[3000],outfile[3000];
int n=0,ch;
float from[1000] ;
float to[1000] ;
float f = 0 ,x=0.0012,u=1.9;
int i = 0 ;
printf("in put mingwenlujing:\n");
scanf("%s",infile);
if((pt=fopen(infile,"rb"))==NULL)
{
printf("error!");
crypt();
}
printf("input miwenlujing:\n");
scanf("%s",outfile);
if((ct=fopen(outfile,"wb"))==NULL)
{
printf("error!");
crypt();
}
while(!feof(pt))
{
fread(&from[n],4,1,pt) ;
n++ ;
}
n = n-1 ;
printf ("\n") ;
rewind(pt);
rewind(ct);
for (i=0 ; i<=n;i++)
{
do{
x = 1 -u*x*x ;
}
while(fabs(x)<=1e-5) ;
f = from[i] * x ;
fwrite(&f,4,1,ct);
}
fclose(pt);
fclose(ct);
printf("miwenbaocunzai:%s\n",outfile);
/* getch();*/
}

void decrypt()/******解密程序*******/
{
FILE *pt,*ct;
char key,infile[3000],outfile[3000];
int n=0,ch;
float from[1000] ;
float to[1000] ;
float f,x=0.0012,u=1.9;
int i = 0 ;
printf("inputmingwenlujing\n");
scanf("%s",outfile);
if((ct=fopen(outfile,"rb"))==NULL)
{
printf("error");
decrypt();
}
printf("inputmingwen:\n");
scanf("%s",infile);
if((pt=fopen(infile,"wb"))==NULL)
{
printf("error!");
decrypt();
}
while(!feof(ct))
{
fread(&from[n],4,1,ct) ;
n++;
}
printf("\n");
n = n-1 ;
rewind(pt);
rewind(ct);
for(i=0;i<=n;i++)
{
do{
x = 1 -u*x*x ;
}
while(fabs(x)<=1e-5) ;

f = from[i] / x ;
fwrite(&f,4,1,pt);
}
fclose(pt);
fclose(ct);
printf("mingwenbaocun:%s\n",infile);
/* getch();*/
}
void count()
{
FILE *pta,*ptb;
char path1[3000],path2[3000];
char px,py;
float n=0.0,i=0.0;
printf("请输入加密前明文的路径\n");
scanf("%s",path1);
if((pta=fopen(path1,"rb"))==NULL)
{
printf("路径错误,无法打开文件\n");
count();
}
printf("请输入解密后明文的路径:\n");
scanf("%s",path2);
if((ptb=fopen(path2,"rb"))==NULL)
{
printf("路径错误,无法打开文件!\n");
count();
}
while(!feof(pta))
{
fread(&px,1,1,pta);
n++;
fread(&py,1,1,ptb);
if(px==py)
i++;
}
printf("jiamiqian n=%.0f,\n jiemihou i=%.0f。\n",n,i);
fclose(pta);
fclose(ptb);
printf("误码率为:%.4f%%\n",(n-i)/n*100.0);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式