【密码学】一文读懂XXTEA

简介: 本篇文章,我们接着来看TEA算法的升级版,这个实际上是XTEA算法的升级版,这也是TEA系列算法的最后一篇了,这个算法的祖孙三个就都结束了

XXTEA(Corrected Block TEA)算法


$6J9P4Q3AM}8{I$W3RG0FLY.jpgXXTEA

本篇文章,我们接着来看TEA算法的升级版,这个实际上是XTEA算法的升级版,这也是TEA系列算法的最后一篇了,这个算法的祖孙三个就都结束了


算法概况

密码的设计者是剑桥计算机实验室的罗杰·李约瑟和大卫·惠勒,该算法在1998年10月的一份未发表的[需要澄清的]技术报告中提出(惠勒和李约瑟,1998年)。它不受任何专利的约束。【维基百科】


加密过程

6~5V4ZK]CV[QT4JH}Q@NMYG.pngXXTEA加密过程(图片来源于维基百科)

这里偷懒了,直接借用一下维基百科里面的图片, 哈哈。

这个结构,相比于TEA以及XTEA来说变化的还是比较的大, 并且这个没有限制输入的明文的长度,对任意长度都可以进行处理,不需要自己去做相关的链接操作。

首先,轮数输入的数据长度控制, rounds = 6 + 52 / length, 然后就是每轮的具体操作了,每轮操作的具体过程,参考上面的图,其中核心的控制有一个mx函数,具体函数如下:

fn mx(sum: u32, y: u32, z: u32, p: u32, e: u32, k: &Vec<u32>) -> u32 {
    ((z >> 5 ^ y << 2).wrapping_add(y >> 3 ^ z << 4)) ^ ((sum ^ y).wrapping_add(k[(p & 3 ^ e) as usize] ^ z))
}

好了,到这里整个过程就算讲完了,到这里TEA的系列也就都结束了, 希望各位读者大佬们看的开心。


代码实现

老样子了,咱们依然用rust来写一下这个算法。

const DELTA: u32 = 0x9E3779B9;
fn mx(sum: u32, y: u32, z: u32, p: u32, e: u32, k: &Vec<u32>) -> u32 {
    ((z >> 5 ^ y << 2).wrapping_add(y >> 3 ^ z << 4)) ^ ((sum ^ y).wrapping_add(k[(p & 3 ^ e) as usize] ^ z))
}
struct XXTEA {}
impl XXTEA {
    pub fn encrypt(v: &mut Vec<u32>, key: &Vec<u32>) -> Vec<u32> {
        let length: u32 = v.len() as u32;
        let n: u32 = length - 1;
        let mut e: u32;
        let mut y: u32;
        let mut z = v[n as usize];
        let mut sum: u32 = 0;
        let mut q: u32 = 6 + 52 / length;
        while q > 0 {
            sum = sum.wrapping_add(DELTA);
            e = sum >> 2 & 3;
            for p in 0..n {
                y = v[(p as usize) + 1];
                v[p as usize] = v[p as usize].wrapping_add(mx(sum, y, z, (p as u32), e, &key));
                z = v[p as usize];
            }
            y = v[0];
            v[n as usize] = v[n as usize].wrapping_add(mx(sum, y, z, n, e, &key));
            z = v[n as usize];
            q = q - 1;
        }
        return v.clone();
    }
    pub fn decrypt(v: &mut Vec<u32>, key: &Vec<u32>) -> Vec<u32> {
        let length: u32 = v.len() as u32;
        let n: u32 = length - 1;
        let mut e: u32;
        let mut y: u32 = v[0];
        let mut z;
        let q: u32 = 6 + 52 / length;
        let mut sum: u32 = q.wrapping_mul(DELTA);
        while sum != 0 {
            e = sum >> 2 & 3;
            let mut p: usize = n as usize;
            while p > 0 {
                z = v[p - 1];
                v[p] = v[p].wrapping_sub(mx(sum, y, z, (p as u32), e, &key));
                y = v[p];
                p = p - 1;
            }
            z = v[n as usize];
            v[0] = v[0].wrapping_sub(mx(sum, y, z, 0, e, &key));
            y = v[0];
            sum = sum.wrapping_sub(DELTA);
        }
        return v.clone();
    }
}
#[cfg(test)]
mod test {
    use crate::xxtea::XXTEA;
    #[test]
    fn test() {
        let result = XXTEA::encrypt(&mut vec![1, 2], &vec![3, 4, 5, 6]);
        println!("{:?}", result);
        let result = XXTEA::decrypt(&mut vec![3884816341, 1540776289], &vec![3, 4, 5, 6]);
        println!("{:?}", result);
    }
}


相关文章
|
存储 Rust 并行计算
【密码学】一文读懂XTS模式
这篇文章的灵感来源于我偶然翻到的一个某U盘有关磁盘加密的一个介绍(这一篇不是广告蛤), 然后发现这个模式我之前还真没遇到过,因此呢,就学习了一下,就出来了这一篇文章。
4992 0
【密码学】一文读懂XTS模式
|
Web App开发 Rust 算法
【密码学】一文读懂ChaCha20
好久没写新的加密算法的原理了, 这次所选取的加密算法结构比较简单, 一起来看一下吧。
7452 0
【密码学】一文读懂ChaCha20
|
算法 数据安全/隐私保护
【密码学】一文读懂Whirlpool
首先呢,祝大家今晚节日快乐,Whirlpool是由Vincent Rijmen(高级加密标准的联合创始人)和Paulo S.L.M.Barreto设计的,后者于2000年首次提出了它。
1086 0
【密码学】一文读懂Whirlpool
|
Rust 算法 网络安全
【密码学】一文读懂CMAC
介于上一篇文章比较水,然后这个和上一篇也比较相似,CMAC是为了解决DAA当中安全性不足的问题而出现的,这个算法一共有三个密钥,K, K1, K2, 其中K1和K2可以由K导出,接下来就来一起看一下CMAC的具体过程吧,这一篇文章其实也不长。
3616 0
【密码学】一文读懂CMAC
|
Rust 算法 Go
【密码学】一文读懂MurMurHash3
本文应该是MurMurHash算法介绍的最后一篇,来一起看一下最新的MurMurHash算法的具体过程,对于最新的算法来说,整个流程和之前的其实也比较相似,这里从维基百科当中找到了伪代码,也就不贴出来Google官方给出的推荐代码了,先来看一下维基百科给出的伪代码,这里只有32位的伪代码。
2085 0
【密码学】一文读懂MurMurHash3
|
Rust 算法 安全
【密码学】一文读懂MurMurHash2
上次我们聊过了一代的MurMurHash算法,是的,我又来水文章了,今天呢,接着来聊一下二代的MurMurHash算法,二代算法的整体结构实际上和一代算法差不太多,只是对于每一轮数据的处理过程当中的运算有一些差异,算法的来源依然是来自于Google官网给提供的源码,对着源码看的结构,对于这个算法呢,有两个版本,一个是32位的,一个是64位的,对于32位的算法和64位的算法,区别在于两个初始的魔数不同,整体运算过程还是十分相似的。
2146 0
【密码学】一文读懂MurMurHash2
|
Rust 算法 数据安全/隐私保护
【密码学】一文读懂XTEA加密
本篇文章,我们来看一下上一次讲过的TEA加密算法的一个升级版XTEA, 相比于TEA, XTEA的安全性显然是更高的,其中的过程要比TEA稍微复杂一点点。
1249 0
【密码学】一文读懂XTEA加密
|
算法 安全 Go
【密码学】一文读懂HKDF
我这又来水一篇文章,来聊一下HKDF(基于HMAC的密钥导出函数)。密钥派生函数是密钥管理的组成部分,他的目标是通过一些初始的数据派生出来密码学安全的随机密钥。
3050 1
【密码学】一文读懂HKDF
|
存储 安全 算法
为什么人人都要懂点密码学
人类进入二十一世纪以来,随着计算机和移动设备的普及高速发展,我们的社会已经高度信息化,为了防止信息被窃取、修改,就需要对信息的存储、传递进行加密处理,而加密就需要使用到加密算法,解密需要使用密码才可以看到原文。
228 1
|
算法 搜索推荐 安全
【密码学】一文读懂CCM
本文简单介绍了CCM模式下的认证和加密机制,实际上这个是AES-CTR模式和CMAC的一个组合,如果理解了前面这两个,本文应该还是比较好理解的。
3358 0
【密码学】一文读懂CCM