|
楼主 |
发表于 2012-7-23 10:38:32
|
显示全部楼层
回 17 楼,代码确实是搞错了。你是对的。
(我奇怪我博客上面的文章没有搞错啊 ..... 奇怪....)- // 随机数加密算法,原理很简单 A^B = C , A^C =B , B^C = A
- // Etual 2011-3-14
- #include <stdio.h>
- // 7byte 数据 和 1byte key
- unsigned char code_buf[8] = {0x12,0x13,0x14,0x15,0x21,0x22,0x23,0x00};
- void print_buf(void)
- {
- int i;
- for (i=0;i<8;i++)
- {
- printf("%x,",code_buf[i]);
- }
- printf("\n");
- }
- int main(void)
- {
- unsigned char key,new_key;
- unsigned char rand_digi;
- int i;
- printf("original buf is!\n");
- print_buf();
- // key 是一个私钥,两个通讯之间各自拥有
- key = 0x55;
- // rand_digi 是一个随机数
- rand_digi = 0xe3;
- // 用私钥对随机数加密得到密文作为新的key使用
- new_key = key ^ rand_digi;
- // 用这个新的key对数据进行加密
- for (i=0;i<7;i++)
- {
- code_buf[i] ^= new_key;
- }
- // 这个key伴随着数据一起传送出去
- code_buf[7] = new_key;
- printf("encrypted buf is!\n");
- print_buf();
- // 假设接收端正确接收到这个已经加密了的8字节数据
- printf("now decode:\n");
- // 因为最后一个字节是key,用这个对前面的数据进行解密
- for (i=0;i<7;i++)
- {
- code_buf[i] ^= code_buf[7];
- }
- // 最后一个本身也是加密了的,用私钥进行还原可以得到随机数
- code_buf[7] ^= key;
- print_buf();
- return 0;
- }
复制代码 |
|