XXTEA加密算法原理学习
本文最后更新于226 天前,其中的信息可能已经过时,如有错误可以直接在文章下留言

烦了,题目遇到XXTEA加密算法又不会,这玩意也考的挺多的,XXTEA考得多,XTEA也考得挺多,就是不考TEA。😅

C语言实现TEA系列加解密算法_tea加解密 c语言-CSDN博客

XXTEA加密算法得全称自然就是Extended Extended Tiny Encryption Algorithm,不必多说,也有些和初始得TEA加密算法相似的地方,但相比XTEA的改动,XXTEA的改动看起来要多一些。在网上介绍这个加密算法的文章也少了一些

C语言代码实现

#define DELTA 0x9e3779b9  
#define MX (((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(p&3)^e] ^ z)))  
void btea(uint32_t *v, int n, uint32_t const key[4])  
{  
    uint32_t y, z, sum;  
    unsigned p, rounds, e;  
    if (n > 1)            /* Coding Part */  
    {  
        rounds = 6 + 52/n;  
        sum = 0;  
        z = v[n-1];  
        do  
        {  
            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;  
        }  
        while (--rounds);  
    }  
    else if (n < -1)      /* Decoding Part */  
    {  
        n = -n;  
        rounds = 6 + 52/n;  
        sum = rounds*DELTA;  
        y = v[0];  
        do  
        {  
            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;  
        }  
        while (--rounds);  
    }  
}

这个加密和解密代码是在一起,根据你传入函数的n来决定是加密还是解密。网上也有其他版本的,但是我仔细区分了一下,发现别的有点小怪,其实这个也挺怪的,但是好像维基百科就是用的这个。

和TEA、XTEA一样,那两个常量依旧在,delta和rounds,我们传入了三个参数,第一个v是明文的数组,n是明文的数组长度,单位为字节,正数是加密,负数是解密。key是密钥数组。TEA系列的加密算法密钥和明文应该都是将数据分开,放入一个数组中的。

rounds = 6 + 52 / n 。这个公式的含义是,对于给定的数据块长度,根据公式计算出加密轮数rounds,以便在加密过程中执行足够的轮数,达到较高的安全性。

TEA算法使用128位密钥,XTEA算法使用128位或者更长的256位密钥,XXTEA算法使用128bit的密钥对以32bit为单位的信息块进行加密,就是数组有四个元素,每个元素4字节。但是网络上关于XXTEA算法的密钥长度也不是很统一。维基百科上是128bit长度。

z = v[p] += MX,C语言中计算表达式是从右往左边执行,所以是先计算MX的值,MX已经宏定义,然后赋值给v[p],再将v[p]赋值给z。

v的明文数组,也是每个元素的长度为32bit。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇