zoukankan      html  css  js  c++  java
  • [转]简单的随机数加密算法实现

    作者: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:密码学是个好大好大的坑。

  • 相关阅读:
    05-java学习-循环结构
    04-java学习-选择结构
    03-java学习-基本数据类型-运算符-键盘接收用户输入
    A02-java学习-classpath配置-标识符-java变量类型
    A01-java学习环境准备
    20190215面试-C#操作外设-多线程-shocket
    装饰者模式
    状态模式
    DllImport学习
    网络编程(一)----基础知识、数据流套接字
  • 原文地址:https://www.cnblogs.com/alimy/p/2947457.html
Copyright © 2011-2022 走看看