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

  1 /**习惯把密码明文存在本地文件中,这个小程序可以把存的密码以密文形式保存**/
  2 #include <stdio.h>
  3 #include <string.h>
  4 #include <stdlib.h>
  5 #include <time.h>
  6 int chartoasc(char c);
  7 int xor(int i);
  8 char asctochar(int a);
  9 int rand_num();
 10 int encrypt(const char *org_pass,char *new_pass);
 11 int decrypt(const char *new_pass,char *org_pass);
 12 
 13 int main(int argc,char *argv[])
 14 {
 15     if(argc!=2)
 16     {
 17         printf("参数输入有误!\n");
 18         printf("usage:<pass flag >\nflag=1:加密;flag=2:解密\n");
 19         return -1;
 20     }
 21     int flag = 0;
 22     int len = 0;
 23     int i = 0;
 24     int ret = 0;
 25     char password[20];
 26     char new_pass[50];
 27     char org_pass[50];
 28     int test1 = 0;
 29     int test2 = 0;
 30     char test3 = 0;
 31     char *p = NULL;
 32 
 33     bzero(password,sizeof(password));
 34     bzero(new_pass,sizeof(new_pass));
 35     bzero(org_pass,sizeof(org_pass));
 36 
 37     flag = atoi(argv[1]);
 38     if(flag == 1)
 39     {
 40         printf("请输入需要加密的密码:");
 41         scanf("%s",password);
 42         ret = encrypt(password,&new_pass);
 43         if(ret)
 44         {
 45             printf("密码加密失败!\n");
 46             return -1;
 47         }
 48         printf("新密码[%s]\n",new_pass);
 49     }
 50     else if(flag ==2)
 51     {
 52         printf("请输入需要解密的密码:");
 53         scanf("%s",password);
 54         ret = decrypt(password,&org_pass);
 55         if(ret)
 56         {
 57             printf("获取原密码失败!\n");
 58             return -1;
 59         }
 60         printf("原密码[%s]\n",org_pass);
 61     }
 62     else
 63     {
 64         printf("加密标志输入如有误!\n");
 65         return -1;
 66     }
 67 
 68     return 0;
 69 }
 70 
 71 /**将字符转换为ASCII值**/
 72 int chartoasc(char c)
 73 {
 74     int i= 0;
 75     i = c;
 76     return i;
 77 }
 78 
 79 /**将ASCII进行异或运算,产生新的ASCII值**/
 80 int xor(int i)
 81 {
 82     int m = 27;
 83     int result = 0;
 84     if(59==i || 100==i)
 85     {
 86         return i;
 87     }
 88     result = i^m;
 89     return result;
 90 }
 91 
 92 /**将ASCII值转换为字符**/
 93 char asctochar(int a)
 94 {
 95     char c;
 96     c = a;
 97     return c;
 98 }
 99 
100 /**输入原密码产生新的密码**/
101 int encrypt(const char *org_pass,char *new_pass)
102 {
103     char org_password[50];
104     char new_password[50];
105     int len = 0;
106     int i = 0;
107     int asc = 0 ;
108     char ch = 0;
109     int x = 0;
110 
111     bzero(org_password,sizeof(org_password));
112     bzero(new_password,sizeof(new_password));
113     strcpy(org_password, org_pass);
114     len = strlen(org_password);
115     for(i=0 ; i<len ; i++)
116     {
117         ch = org_password[i];
118         asc = chartoasc(ch);
119         x = xor(asc);
120         new_password[i] = asctochar(x);
121     }
122     strcpy(new_pass,new_password);
123 
124     return 0;
125 }
126 
127 /**输入加密后的密码返回原密码**/
128 int decrypt(const char *new_pass,char *org_pass)
129 {
130     char new_password[50];
131     char org_password[50];
132     char ch;
133     int a = -1;
134     int len =0;
135     int i=0;
136     int x = -1;
137 
138     bzero(new_password,sizeof(new_password));
139     bzero(org_password,sizeof(org_password));
140 
141     strcpy(new_password,new_pass);
142     len = strlen(new_password);
143     for(i=0;i<len;i++)
144     {
145         ch = new_password[i];
146         a = chartoasc(ch);
147         x = xor(a);
148         org_password[i]=asctochar(x);
149     }
150     strcpy(org_pass,org_password);
151 
152     return 0;
153 }

后续考虑实现界面程序的改进。。。

posted @ 2017-10-27 16:32  子雅陌曦  阅读(14604)  评论(0编辑  收藏  举报