我写了一个按位异或加密的程序,密钥key的值不能在主函数中输出,加密密码cpin也不能正常显示,想知道怎么解决,可以给一个代码吗
问题描述:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include<string.h>
void encryption(int x,char *epin,char key)
{
char cpin[200];
int i=0;
srand(time(0));
key=rand()%94+'!';
for(i=0;i<x;i++)
{
do{
epin[i]=cpin[i]^key;
}while(epin[i]<'!');
}
}
int main()
{
int x=0,i1=0;
char cpin[200],epin[x],key;
getchar();
printf("please input your password:");
while((cpin[x] = getchar())!='\n')
{
x=x+1;
}
printf("your length of password is %d\n",x);
encryption(x,epin,key);
printf("your key is %c\n",key);
printf("your encrypted password is ");
for(i1=0;i1<x;i1++)
{
printf("%c",epin[i1]);
}
return 0;
}
答
void encryption(int x,char *epin,char *cpin,char *key)
{
int i=0;
*key=rand()%94+'!';
for(i=0;i<x;i++)
{
epin[i]=cpin[i]^*key;
if(epin[i]<'!')
{
i=0;
*key=rand()%94+'!';
}
}
}
int main()
{
int x=0,i1=0;
char cpin[200],epin[200],key;
srand(time(0));
getchar();
printf("please input your password:");
while((cpin[x++] = getchar())!='\n')
{
// x=x+1;
}
printf("your length of password is %d\n",x);
encryption(x,epin,cpin,&key);
printf("your key is %c\n",key);
printf("your encrypted password is ");
for(i1=0;i1<x;i1++)
{
printf("%c",epin[i1]);
}
return 0;
}
答
代码修改如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include<string.h>
void encryption(int x,char *cpin,char *epin,char *key) //cpin作为参数传进来
{
int i=0;
srand(time(0));
*key=rand()%94+'!';
for(i=0;i<x;i++)
{
epin[i]=cpin[i]^(*key);
/*
do{
epin[i]=cpin[i]^key[i];
}while(epin[i]<'!');*/ //key不变的话,do while没有任何用处
}
epin[i] = 0; //最好加上这一句
}
int main()
{
int x=0,i1=0;
char cpin[200],epin[200],key;
//getchar();//这一句不需要
printf("please input your password:");
while((cpin[x] = getchar())!='\n')
{
x=x+1;
}
printf("your length of password is %d\n",x);
encryption(x,cpin,epin,&key);
printf("your key is %c\n",key);
printf("your encrypted password is ");
for(i1=0;i1<x;i1++)
{
printf("%c",epin[i1]);
}
//测试是否正确,用key与epin元素异或即可得到原来的密码,这段代码你注释掉就可以了
printf("\n测试,还原原来的密码:");
for(i1=0;i1<x;i1++)
{
printf("%c",epin[i1]^key);
}
return 0;
}