代码实现与示例

#!/usr/bin/env python
# -*- coding: utf-8 -*-"""
参数描述:DELTA: 神秘常数δ,它来源于黄金比率,以保证每一轮加密都不相同。但δ的精确值似乎并不重要,这里 TEA 把它定义为 δ=「(√5 - 1)231」v: 需要加解密的数据,格式为32位的无符号整数组成的数组n: n表示需要加密的32位无符号整数的个数(例:n为1时,只有v数组中的第一个元素被加密了),n不能大于v的长度k: 密钥,格式为4个32位无符号整数组成的数组,即密钥长度为128位
"""import struct
from ctypes import c_uint32DELTA = 0x9E3779B9def encrypt(v, n, k):rounds = 6 + int(52 / n)sum = c_uint32(0)z = v[n - 1].valuewhile rounds > 0:sum.value += DELTAe = (sum.value >> 2) & 3p = 0while p < n - 1:y = v[p + 1].valuev[p].value += (((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4)) ^ ((sum.value ^ y) + (k[(p & 3) ^ e] ^ z)))z = v[p].valuep += 1y = v[0].valuev[n - 1].value += (((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4)) ^ ((sum.value ^ y) + (k[(p & 3) ^ e] ^ z)))z = v[n - 1].valuerounds -= 1def decrypt(v, n, k):rounds = 6 + int(52 / n)sum = c_uint32(rounds * DELTA)y = v[0].valuewhile rounds > 0:e = (sum.value >> 2) & 3p = n - 1while p > 0:z = v[p - 1].valuev[p].value -= (((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4)) ^ ((sum.value ^ y) + (k[(p & 3) ^ e] ^ z)))y = v[p].valuep -= 1z = v[n - 1].valuev[0].value -= (((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4)) ^ ((sum.value ^ y) + (k[(p & 3) ^ e] ^ z)))y = v[0].valuesum.value -= DELTArounds -= 1def test1():k = [2, 2, 3, 4]v = [c_uint32(1), c_uint32(2)]print('plain: 1 2')encrypt(v, len(v), k)print('encrypted: %X %X' % (v[0].value, v[1].value))decrypt(v, len(v), k)print('decrypted: %X %X' % (v[0].value, v[1].value))def test2():k = [0x01234567, 0x89ABCDEF, 0xFEDCBA98, 0x76543210]v = []# 示例的末尾补了两个空格,凑够4的倍数plaintext = 'flag{dfccf8f0-0c97-11ec-82e0-0c9d9242e535}  'print('plain: %s' % plaintext)# 将字符串转换成32位无符号整数的数组(注意大小端)for i in range(0, len(plaintext), 4):n = struct.unpack('>I', plaintext[i:i + 4])[0]v.append(c_uint32(n))# 加密encrypt(v, len(v), k)# 输出加密后的数据,以16进制字符串格式str_list = []for i in range(len(v)):str_list.append(hex(v[i].value).replace('0x', '').replace('L', ''))print('encrypted: %s' % ''.join(str_list))# 解密decrypt(v, len(v), k)# 输出解密后的数据str_list = []for i in range(len(v)):str_list.append(str(struct.pack('>I', v[i].value)))print('decrypted: %s' % ''.join(str_list))if __name__ == '__main__':print('[test1]')test1()print('[test2]')test2()

执行输出

[test1]
plain: 1 2
encrypted: C108A48B 7ABCCB32
decrypted: 1 2
[test2]
plain: flag{dfccf8f0-0c97-11ec-82e0-0c9d9242e535}
encrypted: 39cc3382f09c1c65b4949744f5f867a4235b1e9b4c2db199102978e8e1ed0f6aa4ebe327a8bf05a0305d16
decrypted: flag{dfccf8f0-0c97-11ec-82e0-0c9d9242e535}  

参考

  • https://blog.csdn.net/gsls200808/article/details/48243019
  • https://www.cnblogs.com/huhu0013/p/3334890.html

XXTEA 加解密算法的 Python 实现相关推荐

  1. JAVA:实现XXTea加解密算法(附完整源码)

    JAVA:实现XXTea加解密算法 public class XXTEAprivate XXTEA() {}public static byte[] encrypt(byte[] data, byte

  2. python实现凯撒密码、凯撒加解密算法

    python实现凯撒密码.凯撒加解密算法 更多python视频教程请到菜鸟教程https://www.piaodoo.com/ 凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字 ...

  3. C#和Javascript间互转的Xxtea加解密

    很有意思的一件事情,当我想要找 Xxtea 加解密算法的时候,发现了前同事(likui318)的代码,不妨分享出来.此代码满足: 1:Xxtea支持中文: 2:支持 JS 和 C# 加解密之间的互转: ...

  4. python中凯撒密码_python实现凯撒密码、凯撒加解密算法

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message): # *************begin* ...

  5. python:实现DES和3DES加解密算法(附完整源码)

    python:实现DES和3DES加解密算法 import sys _pythonMajorVersion = sys.version_info[0]# Modes of crypting / cyp ...

  6. 凯撒加密的python语言程序_python实现凯撒密码、凯撒加解密算法

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message): # *************begin* ...

  7. Python中的AES加解密算法

    AES加密的参数及其条件:这个AES加密的主要坑就在于这些条件,首先AES加密有几个参数 秘钥:加密的时候用秘钥,解密的时候需要同样的秘钥才能解出来 明文:需要加密的内容 模式:aes 加密常用的有E ...

  8. 基于新唐M0的XXTEA加密解密算法源码

    源:基于新唐M0的XXTEA加密解密算法源码 /*--------------------------------------------------------------------------- ...

  9. C语言实现TEA系列加解密算法

    C语言实现TEA系列加解密算法 TEA加解密 XTEA加解密 XXTEA加解密 TEA加解密 #include <stdio.h> #include <stdint.h>//加 ...

最新文章

  1. oracle分页排序
  2. java 依赖算法_java – Maven 2 – 从传递依赖版本定义依赖版本
  3. Gym 101194D Ice Cream Tower
  4. top.location.href和localtion.href代码剖析
  5. Maven的Spring Security
  6. 访问权限冲突定义_一文读懂F5 REST API的细粒度角色访问控制
  7. mask属性是css3的吗_使用CSS3 mask(蒙版,遮罩)属性实现超酷按钮悬停动画
  8. mysql 默认sql mode_MySQL的sql_mode模式说明及设置
  9. 分享一个dapper简单封装
  10. Metasploit Framework(6)客户端渗透(上)
  11. node mysql 搭建博客_node.js+Hexo+Git搭建个人博客
  12. 软件开发:到底谁还在传言软件巨头濒临死亡?
  13. 企业如何选择最佳的SSL
  14. 用python爬虫批量下载pdf
  15. 双稳态电路的两个稳定状态是什么_电子电路原理图识图心得及电路分析方法
  16. oracle sql 正则表达式
  17. 第四方支付跟第三方支付的区别,支付源码有什么用
  18. php爬虫post,PHPspider爬虫10分钟快速教程
  19. 基于docker1.7.03.1单机上部署hadoop2.7.3分布式集群
  20. 零基础:21天搞定Python分布爬虫完整视频教程百度网盘免费获取

热门文章

  1. Python3 获取CSDN博客文章的阅读数和评论量
  2. his系统服务器安全方案,his系统建设方案.doc
  3. MySQL测试SQL执行的速度测试
  4. 小程序-----小程序开发工具使用及流程文档说明
  5. 计算机组装小白,电脑组装后如何安装系统图文教程
  6. 怎样安装注册金蝶软件
  7. 芯动科技取消 Grin 矿机销售计划 愿意出售产品完整设计方案
  8. 渲染TA实战:摄影测量游戏模型制作指南
  9. MPU6500驱动调试笔记(STM32F427+SPI2)
  10. 发动机控制器集成测试系统