c语言实现对密码(字符串)进行加密,并解密

  • Post author:
  • Post category:其他


/**习惯把密码明文存在本地文件中,这个小程序可以把存的密码以密文形式保存**/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
int chartoasc(char c);
int xor(int i);
char asctochar(int a);
int rand_num();
int encrypt(const char *org_pass,char *new_pass);
int decrypt(const char *new_pass,char *org_pass);

int main(int argc,char *argv[])
{
    if(argc!=2)
    {
        printf("参数输入有误!\n");
        printf("usage:<pass flag >\nflag=1:加密;flag=2:解密\n");
        return -1;
    }
    int flag = 0;
    int len = 0;
    int i = 0;
    int ret = 0;
    char password[20];
    char new_pass[50];
    char org_pass[50];
    int test1 = 0;
    int test2 = 0;
    char test3 = 0;
    char *p = NULL;

    bzero(password,sizeof(password));
    bzero(new_pass,sizeof(new_pass));
    bzero(org_pass,sizeof(org_pass));

    flag = atoi(argv[1]);
    if(flag == 1)
    {
        printf("请输入需要加密的密码:");
        scanf("%s",password);
        ret = encrypt(password,&new_pass);
        if(ret)
        {
            printf("密码加密失败!\n");
            return -1;
        }
        printf("新密码[%s]\n",new_pass);
    }
    else if(flag ==2)
    {
        printf("请输入需要解密的密码:");
        scanf("%s",password);
        ret = decrypt(password,&org_pass);
        if(ret)
        {
            printf("获取原密码失败!\n");
            return -1;
        }
        printf("原密码[%s]\n",org_pass);
    }
    else
    {
        printf("加密标志输入如有误!\n");
        return -1;
    }

    return 0;
}

/**将字符转换为ASCII值**/
int chartoasc(char c)
{
    int i= 0;
    i = c;
    return i;
}

/**将ASCII进行异或运算,产生新的ASCII值**/
int xor(int i)
{
    int m = 27;
    int result = 0;
    if(59==i || 100==i)
    {
        return i;
    }
    result = i^m;
    return result;
}

/**将ASCII值转换为字符**/
char asctochar(int a)
{
    char c;
    c = a;
    return c;
}

/**输入原密码产生新的密码**/
int encrypt(const char *org_pass,char *new_pass)
{
    char org_password[50];
    char new_password[50];
    int len = 0;
    int i = 0;
    int asc = 0 ;
    char ch = 0;
    int x = 0;

    bzero(org_password,sizeof(org_password));
    bzero(new_password,sizeof(new_password));
    strcpy(org_password, org_pass);
    len = strlen(org_password);
    for(i=0 ; i<len ; i++)
    {
        ch = org_password[i];
        asc = chartoasc(ch);
        x = xor(asc);
        new_password[i] = asctochar(x);
    }
    strcpy(new_pass,new_password);

    return 0;
}

/**输入加密后的密码返回原密码**/
int decrypt(const char *new_pass,char *org_pass)
{
    char new_password[50];
    char org_password[50];
    char ch;
    int a = -1;
    int len =0;
    int i=0;
    int x = -1;

    bzero(new_password,sizeof(new_password));
    bzero(org_password,sizeof(org_password));

    strcpy(new_password,new_pass);
    len = strlen(new_password);
    for(i=0;i<len;i++)
    {
        ch = new_password[i];
        a = chartoasc(ch);
        x = xor(a);
        org_password[i]=asctochar(x);
    }
    strcpy(org_pass,org_password);

    return 0;
}



版权声明:本文为MoMo_Goder原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。