[转]简单的随机数加密算法实现

 

 

作者:Etual

http://blog.chinaunix.net/uid-2595338-id-2139603.html 

http://www.amobbs.com/thread-4611736-1-1.html

 1 // 随机数加密算法  A^B = C , A^C =B , B^C = A 异或加密
 2 // Etual  2011-3-14
 3 
 4 #include <stdio.h>
 5 
 6 // 7byte 数据 和 1byte key
 7 unsigned char code_buf[8] = {0x12,0x13,0x14,0x15,0x21,0x22,0x23,0x00};
 8 
 9 void print_buf(void)
10 {
11     int i;
12     for (i=0;i<8;i++)
13     {
14         printf("%x,",code_buf[i]);
15     }
16     printf("\n");
17 }
18 
19 int main(void)
20 {
21     unsigned char key,new_key;
22     unsigned char rand_digi;
23     int i;
24 
25     printf("original buf is!\n");
26     print_buf();
27 
28     // key 是一个私钥,两个通讯之间各自拥有 (加密解密都需要)
29     key = 0x55;
30     // rand_digi 是一个随机数
31     rand_digi = 0xe3;  // 可以是时间戳
32     // 用私钥对随机数加密得到密文作为新的key使用
33     new_key = key ^ rand_digi;
34 
35     // 用这个新的key对数据进行加密 加密过程
36     for (i=0;i<7;i++)
37     {
38         code_buf[i] ^= new_key;
39     }
40     // 这个key伴随着数据一起传送出去
41     code_buf[7] = new_key;
42 
43     printf("encrypted buf is!\n");
44     print_buf();
45 
46 
47 //解密过程
48 // 假设接收端正确接收到这个已经加密了的8字节数据 49 printf("now decode:\n"); 50 // 因为最后一个字节是key,用这个对前面的数据进行解密 51 for (i=0;i<7;i++) 52 { 53 code_buf[i] ^= code_buf[7]; 54 } 55 // 最后一个本身也是加密了的,用私钥进行还原可以得到随机数 56 code_buf[7] ^= key; 57 58 print_buf(); 59 60 return 0; 61 }

 

加密强度一般,避免了数据直接裸露。

PS:密码学是个好大好大的坑。

posted @ 2013-03-07 09:45  Alimy  阅读(1002)  评论(1编辑  收藏  举报