找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6289|回复: 4
打印 上一主题 下一主题
收起左侧

TEA加密解密C语言源码

  [复制链接]
跳转到指定楼层
楼主
ID:410427 发表于 2018-10-16 17:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
加密函数:
btea_encrypt(T_buffer, TEA_key );
TX_buffer是需要发送的数据,经过该函数后,TX_buffer便是加密后的数据。

解密函数:
btea_decrpyt(RX_buffer, TEA_key);
RX_buffer是接收到的加密数据,经过该函数,RX_buffer便是解密后的数据(即实际传输数据)

BLOCK_SIZE 要和数据长度相等

单片机源程序如下:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. /*******************
  5.   TEA加密解密算法
  6. *******************/
  7. #define DATA_LEN 32

  8. #define MX (z>>5^y<<2)+(y>>3^z<<4)^(sum^y)+(k[p&3^e]^z)
  9. #define DELTA 0x9e3779b9
  10. #define S_LOOPTIME   1                                //5
  11. #define BLOCK_SIZE   DATA_LEN                //PAGE_SIZE,根据你所要加密的数据包长度修改此参数(单位:字节)

  12. unsigned char TEA_key[16]=
  13. {
  14.   0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
  15.   0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10
  16. };

  17. //数据缓冲区
  18. unsigned char TX_buffer[DATA_LEN];
  19. unsigned char RX_buffer[DATA_LEN];


  20. /*加密时使用函数, buf里面的内容就是加密后的数据,key是加密密钥*/
  21. void btea_encrypt( unsigned char* buf, unsigned char* key )
  22. {
  23.   unsigned char  n=BLOCK_SIZE/4;
  24.   unsigned long *v=(unsigned long *)buf;
  25.   unsigned long *k=(unsigned long *)key;
  26.   unsigned long z = v[n - 1],y = v[0],sum = 0,e ;
  27.   unsigned char p,q ;
  28.   // Coding Part

  29.   q = S_LOOPTIME + 52 / n ;
  30.   while ( q-- > 0 )
  31.   {
  32.     sum += DELTA ;
  33.     e = sum >> 2 & 3 ;
  34.     for ( p = 0 ; p < n - 1 ; p++ )
  35.       y = v[p + 1],
  36.       z = v[p] += MX;
  37.       y = v[0] ;
  38.     z = v[n - 1] += MX;
  39.   }
  40. }

  41. /*解密时使用函数, buf里面的内容就是解密后的数据,key是解密密钥*/
  42. void btea_decrpyt( unsigned char* buf, unsigned char* key )
  43. {
  44.   unsigned char n=BLOCK_SIZE/4;
  45.   unsigned long *v=(unsigned long *)buf;
  46.   unsigned long *k=(unsigned long *)key;
  47.   unsigned long z = v[n - 1],y = v[0],sum = 0,e ;
  48.   unsigned char  p,q ;

  49.   //Decoding Part...
  50.   q = S_LOOPTIME + 52 / n ;
  51.   sum = q * DELTA ;
  52.   while ( sum != 0 )
  53.   {
  54.     e = sum >> 2 & 3 ;
  55.     for ( p = n - 1 ; p > 0 ; p-- )
  56.       z = v[p - 1],
  57.       y = v[p] -= MX;
  58.       z = v[n - 1] ;
  59.     y = v[0] -= MX;
  60.             sum -= DELTA ;
  61.   }
  62. }
  63. /************************************************************************************************************/
  64. void CreateBUF(unsigned char *buf)
  65. {
  66.         int i = 0;

  67.         for (i = 0;i < DATA_LEN; i++)
  68.         {
  69.                 buf[i] = rand()%255;
  70.         }
  71. }

  72. void Trans(unsigned char *buf1, unsigned char *buf2)
  73. {
  74.         int i = 0;

  75.         for (i = 0;i < DATA_LEN; i++)
  76.         {
  77.                 buf2[i] = buf1[i];
  78.         }
  79. }

  80. void DIS(unsigned char sts, unsigned char*buf)
  81. {
  82.         int i = 0;
  83.        
  84.         printf("\n");
  85.         switch (sts)
  86.         {
  87.                 case 0:        printf("实际发送数组:");        break;
  88.                 case 1:        printf("加密数据数组:");        break;
  89.                 case 2:        printf("实际接收数组:");        break;
  90.                 default:        break;
  91.         }
  92.         for (i = 0;i < DATA_LEN; i++)
  93.         {
  94.                 printf("%d ", buf[i]);
  95.         }
  96.         printf("\n");
  97. }

  98. int main(void)
  99. {
  100.         srand((time(NULL)));
  101.         CreateBUF(TX_buffer);                                //生成一组随机数
  102.         DIS(0,TX_buffer);                                        //显示实际数据

  103.         btea_encrypt(TX_buffer, TEA_key);        //发送数组加密
  104.         DIS(1,TX_buffer);                                        //显示加密后的数据

  105.         Trans(TX_buffer, RX_buffer);                //模拟信道
  106.         btea_decrpyt(RX_buffer, TEA_key);        //接收数组解密
  107.         DIS(2, RX_buffer);                                        //显示接收数据
  108.         return 0;
  109. }       
复制代码

所有资料51hei提供下载:
TEA加密解密.zip (209.98 KB, 下载次数: 69)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:576869 发表于 2019-7-3 10:57 | 只看该作者
能不能下载啊
回复

使用道具 举报

板凳
ID:367273 发表于 2021-8-21 16:28 | 只看该作者
大哥,你这个加密算法,看着和标准的TEA加密算法不大一样啊,你这个是不是可以实现任意字节数量加密啊
回复

使用道具 举报

地板
ID:614295 发表于 2022-8-13 15:40 来自手机 | 只看该作者
在其他网站看到一个只能加密7byte以上的简化版tea加密,本贴这个不知道能否任意个数据加密。
回复

使用道具 举报

5#
ID:1044553 发表于 2022-9-12 16:23 | 只看该作者
前来学习。不太懂怎么使用的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表