久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

數(shù)據(jù)的加密傳輸——單片機上實現(xiàn)TEA加密解密算法

 昵稱7503466 2011-09-27
數(shù)據(jù)的加密傳輸——單片機上實現(xiàn)TEA加密解密算法 回復(fù)數(shù):104,點擊數(shù):4544
【樓主位】 nilxy
積分:36
派別:
等級:------
來自:南國
各位大俠在做數(shù)據(jù)傳輸時,,有沒有考慮過把數(shù)據(jù)加密起來進行傳輸,若在串口或者無線中把所要傳的數(shù)據(jù)加密起來,,豈不是增加了通信的安全性,。常用的加密解密算法比如DES、RSA等,,受限于單片機的內(nèi)存和運算速度,,實現(xiàn)起來比較困難,但一種叫TEA的加密算法特別適合單片機使用,,我搜了一下,,發(fā)現(xiàn)壇子里沒有相關(guān)資料,嘿嘿,,鉆了個空,,補充之~~

TEA(Tiny Encryption Algorithm)是一種簡單高效的加密算法,以加密解密速度快,,實現(xiàn)簡單著稱,。算法很簡單,TEA算法每一次可以操作64-bit(8-byte),,采用128-bit(16-byte)作為key,,算法采用迭代的形式,推薦的迭代輪數(shù)是64輪,,最少32輪,。目前我只知道QQ一直用的是16輪TEA。--摘自CSDN博客

我之前做過一個數(shù)字的無線對講機,,把語音數(shù)據(jù)加密后發(fā)送,,雙方事先規(guī)定好公共的密鑰,就可以進行加密和解密了,。至于TEA算法速度,,在我看來確實很快,我當(dāng)時用的是16位的msp430單片機,,晶振只有6M,,每秒鐘大概可以進行兩三百次加密和解密的操作(一次加密和解密32字節(jié))。
說到加密,,最簡單的方式就是把要發(fā)送的數(shù)據(jù)和同樣長度的密碼進行異或運算,,得到新的數(shù)據(jù)就是加密后的數(shù)據(jù),然后,,接收方把加密數(shù)據(jù)和密碼進行異或就能得到原始數(shù)據(jù),。但這種異或的方法安全性如何,,我也說不清楚。

下面上傳了c++實現(xiàn)的TEA算法,,可以在vc里面調(diào)試看看,。我把它改了改,讓它適合單片機使用,,下面的TEA.h和TEA.c可以包含在你的工程里面,。
使用時,根據(jù)你所要加密的數(shù)據(jù)包長度修改宏定義BLOCK_SIZE,,密鑰的長度是16字節(jié),。數(shù)據(jù)和密鑰都是存放在數(shù)組里面的,比如:

//TEA密鑰
unsigned char TEA_key[16]=

  0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
  0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10
};

//數(shù)據(jù)緩沖區(qū)
unsigned char TX_buffer[32];
unsigned char RX_buffer[32];

加密時使用函數(shù):
btea_encrypt(TX_buffer,TEA_key);      //TEA加密
這樣,,數(shù)組TX_buffer里面的新內(nèi)容就是加密后的數(shù)據(jù),。

接收到的密文數(shù)據(jù)存放在RX_buffer里面,調(diào)用下面函數(shù):
decrpyt(RX_buffer,TEA_key);      //TEA解密
就能得到之前的明文,。

/*******************
  TEA加密解密算法
*******************/
#include "TEA.h"

#define MX (z>>5^y<<2)+(y>>3^z<<4)^(sum^y)+(k[p&3^e]^z)
#define DELTA 0x9e3779b9
#define S_LOOPTIME   1    //5 控制的是加密的輪數(shù),,q = S_LOOPTIME + 52 / n ; 
                                               //    改為 round   s = 6 + 52/n; 意思更加明了
#define BLOCK_SIZE   32   //PAGE_SIZE,根據(jù)你所要加密的數(shù)據(jù)包長度修改此參數(shù)(單位:字節(jié))

/* 
*key  maybe 128bit =16 Bytes.
*buf  maybe BLOCK_SIZE
*/

void btea_encrypt( unsigned char* buf, unsigned char* key )
{
  unsigned char  n=BLOCK_SIZE/4;
  unsigned long *v=(unsigned long *)buf;
  unsigned long *k=(unsigned long *)key;
  unsigned long z = v[n - 1],y = v[0],sum = 0,e ;
  unsigned char p,q ;
  // Coding Part 

  q = S_LOOPTIME + 52 / n ;
  while ( q-- > 0 )
  {
    sum += DELTA ;
    e = sum >> 2 & 3 ;
    for ( p = 0 ; p < n - 1 ; p++ )
      y = v[p + 1],
      z = v[p] += MX;
      y = v[0] ;
    z = v[n - 1] += MX;
  }
}

/*
*key  maybe 128bit =16Bytes.
*buf  maybe BLOCK_SIZE
inbuf == outbuf == buf
*/

void btea_decrpyt( unsigned char* buf, unsigned char* key )
{
  unsigned char n=BLOCK_SIZE/4;
  unsigned long *v=(unsigned long *)buf;
  unsigned long *k=(unsigned long *)key;
  unsigned long z = v[n - 1],y = v[0],sum = 0,e ;
  unsigned char  p,q ;

  //Decoding Part...
  q = S_LOOPTIME + 52 / n ;
  sum = q * DELTA ;
  while ( sum != 0 )
  {
    e = sum >> 2 & 3 ;
    for ( p = n - 1 ; p > 0 ; p-- )
      z = v[p - 1],
      y = v[p] -= MX;
      z = v[n - 1] ;
    y = v[0] -= MX;
            sum -= DELTA ;
  }
}

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多