Chinaunix首页 | 论坛 | 博客
  • 博客访问: 593962
  • 博文数量: 99
  • 博客积分: 5128
  • 博客等级: 大校
  • 技术积分: 1538
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-27 19:40
文章分类

全部博文(99)

文章存档

2012年(3)

2011年(5)

2010年(4)

2009年(31)

2008年(56)

分类: LINUX

2011-03-14 22:43:54

// 随机数加密算法,原理很简单 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;
}


阅读(6019) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2011-03-27 15:35:52

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com