记录一下TEA加密算法
TEA,XTEA,XXTEA加密算法概要
1. TEA
1.1 概要
在密码学中,微型加密算法(Tiny Encryption Algorithm,TEA)是一种易于描述和执行的块密码,通常只需要很少的代码就可实现。其设计者是剑桥大学计算机实验室的大卫·惠勒与罗杰·尼达姆。这项技术最初于1994年提交给鲁汶的快速软件加密的研讨会上,并在该研讨会上演讲中首次发表。
1.2 属性
待加密数据:64位,2个4字节无符号整数
密钥:128位,4个4字节的无符号整数
delta:通常为0x9e3779b9
轮数:建议为32次
1.3 源码
1.3.1 C语言版本(原生)
1 |
|
1.3.2 Python版本(我自己改编的)
注:调用ctypes模块模拟C风格整数
1 | from ctypes import * |
1.4 CTF竞赛中的应用
1.4.1 出题方式
- 直接C语言算法
- 特殊:使用特殊大数计算函数(ADD,SUB,MUL,XOR,ROL,ROR等),模拟SSA风格的计算方式
- 改变加密轮数或delta的值,变体TEA
delta
的值不直接给,而是先拆成两个数字,然后在异或后得到delta
,来防止被FindCrypt
直接检测到
1.4.2 识别方式
- 简单的直接
FindCrypt
直接发现 - 识别特征值,4和5同时出现时要注意
2. XTEA
2.1 概要
升级版本的TEA算法
2.2 属性
待加密数据:64位,2个4字节无符号整数
密钥:128位,4个4字节的无符号整数
delta:通常为0x9e3779b9
2.3 源码
2.3.1 C语言
1 |
|
2.3.2 Python
1 | import sys |
3. XXTEA
3.1 概要
XXTEA是一个非平衡Feistel网络分组密码,在可变长度块上运行,这些块是32位大小的任意倍数(最小64位),使用128位密钥, 是目前TEA系列中最安全的算法,但性能较上两种有所降低。
3.2 属性
3.3 实现
3.3.1 C语言原生实现
1 |
|
3.3.2 Python实现
可以考虑直接编译C文件后得到dll文件或者so等库文件,用ctypes加载后使用。
3.4 调用现成模块
GitHub上面有很多现成的XXTEA模块,可以直接使用。
3.4.1 Python
3.4.1.1 安装模块
1 | pip install xxtea-py |
3.4.1.2 使用
Python2:
1 | import xxtea |
Python3:
1 | import xxtea |
4. 参考资料
https://github.com/xxtea/xxtea-java
https://github.com/xxtea/xxtea-python
https://blog.csdn.net/MakerCloud/article/details/107454777
https://www.jianshu.com/p/4272e0805da3
https://zh.wikipedia.org/wiki/%E5%BE%AE%E5%9E%8B%E5%8A%A0%E5%AF%86%E7%AE%97%E6%B3%95
- 本文作者: Taardis
- 本文链接: https://taardisaa.github.io/2021/09/24/TEA/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!