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 }
后续考虑实现界面程序的改进。。。