【密码学】一文读懂XTEA加密

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 本篇文章,我们来看一下上一次讲过的TEA加密算法的一个升级版XTEA, 相比于TEA, XTEA的安全性显然是更高的,其中的过程要比TEA稍微复杂一点点。

XTEA(eXtended TEA)加密算法


Z}`DDP8ZM8J7H$HX6_B[D{F.jpgXTEA加密

本篇文章,我们来看一下上一次讲过的TEA加密算法的一个升级版XTEA, 相比于TEA, XTEA的安全性显然是更高的,其中的过程要比TEA稍微复杂一点点。


算法概况

XTEA密码的设计者是剑桥计算机实验室的戴维·惠勒和罗杰·李约瑟,该算法在1997年的一份未发表的技术报告中提出(李约瑟和惠勒,1997年)。


算法描述

(VMBP5)DC{A[B4TVBD8)4Y8.png

image.gif算法结构

具体加解密的过程如上图所示,这里不再具体的描述了,简单说一下他相比于TEA改了什么。

这里,根据维基百科给出的实现,相比于TEA, 这里多了一个轮数的概念,我们可以控制加密的轮数,一般情况下,这个轮数用32,如果轮数取32,那么就和TEA的轮数是一样的了。

然后这里,对于每一轮的操作,有一些改动,这里对于轮密钥的选择,不再是固定的,而是和SUM相关,并且增加了一些运算,我个人的理解,这个可以看做是密钥扩展算法,这个密钥扩展的过程没有提前运算,而是在运算当中扩展的。

好了这里就简单介绍完了,如果看懂了TEA,理解这个应该不难。


代码实现

依然用rust来写吧

const DELTA: u32 = 0x9E3779B9;
struct XTEA {}
impl XTEA {
    pub fn encrypt(num_rounds: u32, v: [u32; 2], k: [u32; 4]) -> [u32; 2] {
        let mut v0 = v[0];
        let mut v1 = v[1];
        let mut sum = 0u32;
        for _ in 0..num_rounds {
            v0 = v0.wrapping_add(((v1.wrapping_shl(4) ^ v1.wrapping_shr(5)).wrapping_add(v1)) ^ (sum.wrapping_add(k[(sum & 3) as usize])));
            sum = sum.wrapping_add(DELTA);
            v1 = v1.wrapping_add(((v0.wrapping_shl(4) ^ v0.wrapping_shr(5)).wrapping_add(v0)) ^ (sum.wrapping_add(k[((sum >> 11) & 3) as usize])));
        }
        return [v0, v1];
    }
    pub fn decrypt(num_rounds: u32, v: [u32; 2], k: [u32; 4]) -> [u32; 2] {
        let mut v0 = v[0];
        let mut v1 = v[1];
        let mut sum = DELTA.wrapping_mul(num_rounds);
        for _ in 0..num_rounds {
            v1 = v1.wrapping_sub(((v0.wrapping_shl(4) ^ v0.wrapping_shr(5)).wrapping_add(v0)) ^ (sum.wrapping_add(k[((sum >> 11) & 3) as usize])));
            sum = sum.wrapping_sub(DELTA);
            v0 = v0.wrapping_sub(((v1.wrapping_shl(4) ^ v1.wrapping_shr(5)).wrapping_add(v1)) ^ (sum.wrapping_add(k[(sum & 3) as usize])));
        }
        return [v0, v1];
    }
}
#[cfg(test)]
mod test {
    use crate::xtea::XTEA;
    #[test]
    fn test() {
        let result = XTEA::encrypt(32, [1, 2], [2, 3, 4, 5]);
        println!("{:?}", result);
        let result = XTEA::decrypt(32, result, [2, 3, 4, 5]);
        println!("{:?}", result);
    }
}


相关文章
|
19天前
|
算法 安全 量子技术
量子计算与密码学:加密技术的新挑战
量子计算的崛起对密码学提出了新挑战。本文探讨了量子计算对现有加密技术的影响,分析了公钥密码、对称密码及通信安全所面临的威胁,并介绍了后量子加密算法等应对措施,展望了未来加密技术的发展趋势。
|
1月前
|
存储 安全 算法
密码学基础:加密技术如何保护我们的在线生活
密码学基础:加密技术如何保护我们的在线生活
50 7
|
2月前
|
算法 安全 量子技术
量子计算与密码学:加密技术的新挑战
【10月更文挑战第29天】本文探讨了量子计算对密码学的影响,分析了现有加密技术面临的挑战,并展望了未来的发展趋势。量子计算的快速发展对传统公钥加密算法(如RSA和ECC)构成巨大威胁,同时也催生了后量子加密算法和量子密钥分发等新技术。文章强调了多元化、标准化和国际合作在构建量子安全加密体系中的重要性。
|
4月前
|
安全 网络安全 量子技术
【骇入心灵的暗网迷雾与密码学的绝地反击】——揭秘网络空间中的致命漏洞与加密艺术的生死较量,一段关于光明与黑暗的数字史诗!
【8月更文挑战第7天】互联网是无限可能之地,亦暗藏危机。网络安全漏洞威胁隐私与安全,加密技术如坚盾保护我们。本文探索网络阴影及加密技术如何运作:对称加密快速但密钥易泄,非对称加密安全但速度较慢。通过示例展示两者差异,并展望加密技术未来发展,确保数字世界安全航行。
71 0
|
6月前
|
安全 算法 Java
密码学基础知识与加密算法解析
密码学基础知识与加密算法解析
|
5月前
|
算法 安全 网络安全
网络安全&密码学—python中的各种加密算法
数据加密是一种保护数据安全的技术,通过将数据(明文)转换为不易被未经授权的人理解的形式(密文),以防止数据泄露、篡改或滥用。加密后的数据(密文)可以通过解密过程恢复成原始数据(明文)。数据加密的核心是密码学,它是研究密码系统或通信安全的一门学科,包括密码编码学和密码分析学。
|
5月前
|
安全 算法 Java
密码学基础知识与加密算法解析
密码学基础知识与加密算法解析
|
7月前
|
存储 人工智能 安全
|
7月前
|
存储 算法 安全
密码学系列之九:密钥管理
密码学系列之九:密钥管理
673 45
|
7月前
|
机器学习/深度学习 资源调度 安全
【现代密码学】笔记5--伪随机置换(分组加密)《introduction to modern cryphtography》
【现代密码学】笔记5--伪随机置换(分组加密)《introduction to modern cryphtography》
118 0