我写了一个按位异或加密的程序,密钥key的值不能在主函数中输出,加密密码cpin也不能正常显示,想知道怎么解决,可以给一个代码吗

我写了一个按位异或加密的程序,密钥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;
}

img

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;
}