【密码学】一文读懂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);
    }
}


相关文章
|
算法 数据安全/隐私保护 C语言
XXTEA加密算法
XXTEA加密算法
959 0
|
Rust 算法 Go
【密码学】一文读懂FNV Hash
FNV哈希全名为Fowler-Noll-Vo算法,是以三位发明人Glenn Fowler,Landon Curt Noll,Phong Vo的名字来命名的,最早在1991年提出。它可以快速hash大量的数据并保持较小的冲突概率,适合hash一些相近的字符串比如IP地址、URL、文件名等等。目前FNV算法有三个版本,分别是: FNV-0(已废弃)、FNV-1以及FNV-1a。这三个算法的结构非常相似,因此呢,在这里就一块说了。
4641 0
【密码学】一文读懂FNV Hash
|
IDE Go 开发工具
Go开发IDE全览:GoLand vs VSCode全面解析
Go开发IDE全览:GoLand vs VSCode全面解析
1514 0
|
存储 算法 数据安全/隐私保护
【密码学】一文读懂白盒AES(Chow方案)(一)
本文主要参考了文献^[1], 代码参考了^[2], 这里感谢文献作者和代码作者,如果有能力的大佬,可以自行查看原文献,个人水平有限,有哪里写的不对的地方,也欢迎读者指正。
5057 0
【密码学】一文读懂白盒AES(Chow方案)(一)
|
Linux 网络虚拟化
Debian系统安装OpenVPN
Debian系统安装OpenVPN
2324 0
|
API 开发者
鸿蒙next版开发:ArkTS组件通用属性(浮层)
在HarmonyOS 5.0中,ArkTS的浮层属性(overlay)允许开发者在组件上增加遮罩文本或叠加自定义组件,实现丰富的界面效果。本文详细解读了overlay属性的用法,并提供了示例代码,包括静态和动态浮层的应用。通过本文,读者可以掌握如何在UI开发中有效利用这一功能。
816 6
|
Java Linux 数据安全/隐私保护
CTF — 图像隐写三板斧
CTF — 图像隐写三板斧
2792 1
Leetcode之多线程编程题
现有函数 printNumber 可以用一个整数参数调用,并输出该整数到控制台。 例如,调用 printNumber(7) 将会输出 7 到控制台。 给你类 ZeroEvenOdd 的一个实例,该类中有三个函数:zero、even 和 odd 。ZeroEvenOdd 的相同实例将会传递给三个不同线程:
332 1
|
人工智能 API 决策智能
【AI Agent系列】【MetaGPT多智能体学习】0. 环境准备 - 升级MetaGPT 0.7.2版本及遇到的坑
【AI Agent系列】【MetaGPT多智能体学习】0. 环境准备 - 升级MetaGPT 0.7.2版本及遇到的坑
566 0

热门文章

最新文章