码迷,mamicode.com
首页 > 其他好文 > 详细

字符串加密解密

时间:2016-01-27 23:15:55      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:

  字符串加密(指定加密密钥)

  如字符串"Good good study,day day up! You can you up,no can no bibi!",加密密钥为"marchfour",对字符串进行加密

  原理很简单,就是字符之间的异或

  错误的代码:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 void encrypt_decode(char *str, char *password)
 5 {
 6     int len_str = strlen(str);
 7     int len_password = strlen(password);
 8     if (len_str%len_password == 0)
 9     {
10         for (int i = 0; i < len_str / len_password; i++)
11         {
12             for (int j = 0; j < len_password; j++)
13             {
14                 str[i*len_password + j] ^= password[j];
15             }
16         }
17     }
18     else
19     {
20         for (int i = 0; i < len_str / len_password; i++)
21         {
22             for (int j = 0; j < len_password; j++)
23             {
24                 str[i*len_password + j] ^= password[j];
25             }
26         }
27         for (int k = 0; k < len_str%len_password; k++)
28         {
29             str[k + len_str / len_password*len_password] ^= password[k];
30         }
31     }
32 }
33 void main()
34 {
35     char str[100] = "Good good study,day day up! You can you up,no can no bibi!";
36     char password[30] = "marchfour";
37     printf("加密前:%s\n", str);
38     encrypt_decode(str, password);
39     printf("加密后:%s\n", str);
40     encrypt_decode(str, password);
41     printf("解密后:%s\n", str);
42     system("pause")
43 }

输出截图:

技术分享

修改后的代码:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 void encrypt_decode(char *str, char *password, int length)
 5 {
 6     int len_str = length;
 7     int len_password = strlen(password);
 8     if (len_str%len_password == 0)
 9     {
10         for (int i = 0; i < len_str / len_password; i++)
11         {
12             for (int j = 0; j < len_password; j++)
13             {
14                 str[i*len_password + j] ^= password[j];
15             }
16         }
17     }
18     else
19     {
20         for (int i = 0; i < len_str / len_password; i++)
21         {
22             for (int j = 0; j < len_password; j++)
23             {
24                 str[i*len_password + j] ^= password[j];
25             }
26         }
27         for (int k = 0; k < len_str%len_password; k++)
28         {
29             str[k + len_str / len_password*len_password] ^= password[k];
30         }
31     }
32 }
33 void main()
34 {
35     char str[100] = "Good good study,day day up! You can you up,no can no bibi!";
36     char password[30] = "marchfour";
37     int length = strlen(str);
38     printf("加密前:%s\n", str);
39     encrypt_decode(str, password, length);
40     printf("加密后:%s\n", str);
41     encrypt_decode(str, password, length);
42     printf("解密后:%s\n", str);
43     system("pause");
44 }

输出截图:

技术分享

说明:

  1.第一段代码错误的原因?因为对字符串加密时,可能加密后的字符是“\0”,但是在解密时,字符串的长度是遇到“\0”就结束,所以解密的长度会出现问题

字符串加密解密

标签:

原文地址:http://www.cnblogs.com/marchfour/p/5164736.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!