介紹XXTEA加密算法及其C實現


介紹XXTEA加密算法及其C實現

http://en.wikipedia.org/wiki/XXTEA

 

“微型加密算法(TEA)及其相關變種(XTEA,Block TEA,XXTEA)都是分組加密算法,它們很容易被描述,實現也很簡單(典型的幾行代碼)。

TEA 算法最初是由劍橋計算機實驗室的 David Wheeler 和 Roger Needham 在 1994 年設計的。該算法使用 128 位的密鑰為 64 位的信息塊進行加密,它需要進行 64 輪迭代。該算法使用了一個神秘常數δ作為倍數,它來源於黃金比率,以保證每一輪加密都不相同。但δ的精確值似乎並不重要,這里 TEA 把它定義為 δ=「(√5 - 1)231」(也就是程序中的 0×9E3779B9 )。”

 

其實,TEA跟我們的關系非常密切,因為QQ就是使用16輪迭代的TEA算法。

 

XXTEA是其最新的變種,於1998年提出。目前還沒有人找到對其進行攻擊的方法,是對前面一些變種的改進。XXTEA 算法很安全,而且非常快速,非常適合應用於 Web 開發中。

 

下面是作者給出的該算法的C實現:

  #define MX (z>>5^y<<2) + (y>>3^z<<4)^(sum^y) + (k[p&3^e]^z);
 
  long btea(long* v, long n, long* k) {
    unsigned long z=v[n-1], y=v[0], sum=0, e, DELTA=0x9e3779b9;
    long p, q ;
    if (n > 1) {         
      q = 6 + 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;
      }
      return 0 ;
    } else if (n < -1) { 
      n = -n;
      q = 6 + 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;
      }
      return 0;
    }
    return 1;
  }

瞧,短的驚人吧!

 

咱也搞不明白數學上的東西,有興趣的話就去上面那個wikipedia里看吧。我這里就講講怎么用。

 

teab will encode or decode n words as a single block where n > 1

  • v is the n word data vector
  • k is the 4 word key
  • n is negative for decoding
  • if n is zero result is 1 and no coding or decoding takes place, otherwise the result is zero
  • assumes 32 bit ‘long’ and same endian coding and decoding

 

這是wikipedia里的說明,講得比較明白了。

最核心的是要明白:XXTEA算法使用128bit的密鑰對以32bit為單位的信息塊進行加密。

 

這段介紹里的'word’這個詞讓我很費了一番周折。我開始以為是“字”,也就是2byte,16bit。但是在我耗費了不少時間進行測試和實驗后,可以確定,word在這里不是一個單位,大概是要翻譯成“組元”之類的詞,其實就是后面說的一個32bit的long類型。

 

搞清楚這個,別的就沒什么了。剛才那段代碼:

 long btea(long* v, long n, long* k)

v是要加密的組元的起始地址,以32bit為單位,這里用long來實現。

n是要加密的組元個數,正數是加密,負數是解密。

k是密鑰的起始地址,長度為4個組元,4*32=128bit。

返回值為0或1(對應n=0,沒有計算)。

加密的結果會直接寫回到v中。

 

經過試驗,我還有一點要補充的,XXTEA的計算是空間相關的,也就是說,在一個組元中,4個字節是不能斷章取義的,即密文的一部分,並不能還原成明文的一部分。所以,當數據不能被4個字節整除時,要做好字節的填充和對其等輔助工作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM