Crypto(4)NewStarCTF 2023 week2 Crypto Rotate Xor

题目代码:

复制代码
# 导入所需的库和从secret模块加载"flag"
from secret import flag
from os import urandom
from pwn import xor
from Cryptodome.Util.number import *

# 生成两个随机的 64 位素数,分别存储在变量 k1 和 k2 中
k1 = getPrime(64)
k2 = getPrime(64)

# 定义常量 ROUND,它的值为 12
ROUND = 12

# 使用 XOR 操作,将 "flag" 和 k1 的二进制表示进行异或运算,生成密文
ciphertext = xor(flag, long_to_bytes(k1))

# 定义一个左循环移位函数 round_rotate_left,用于在后续的加密中进行位操作
def round_rotate_left(num, step):
    return ((num) << step | num >> (64 - step)) & 0xffffffffffffffff

# 定义一个加密函数 encrypt_key,用于对密钥 k1 进行一系列的操作
def encrypt_key(key):
    for _ in range(ROUND):
        # 将密钥 key 左循环移位 3 位,并与 k2 进行按位异或操作
        key = round_rotate_left(key, 3) ^ k2
    return key

# 打印输出密文、经过加密的 k1,以及 k2 的值
print('ciphertext =', ciphertext)
print('enc_k1 =', encrypt_key(k1))
print('k2 =', k2)

这是一个简单的类似lfsr的循环补位 直接逆着rotate_right即可

exp:

复制代码
# 导入所需的库
from pwn import xor
from Crypto.Util.number import *

# 给出的密文
ciphertext = b'\x8dSyy\xd2\xce\xe2\xd2\x98\x0fth\x9a\xc6\x8e\xbc\xde`zl\xc0\x85\xe0\xe4\xdfQlc'

# 给出的经过加密的 k1 和 k2 的值
enc_k1 = 7318833940520128665
k2 = 9982833494309156947

# 定义一个右循环移位函数 round_rotate_right,用于在后续的解密中进行位操作
def round_rotate_right(num, step):
    return ((num) >> step | num << (64 - step)) & 0xffffffffffffffff

# 迭代 12 次来解密密文
for _ in range(12):
    # 对 enc_k1 进行反向位操作,首先是异或操作
    enc_k1 ^= k2
    # 然后进行右循环移位 3 位
    enc_k1 = round_rotate_right(enc_k1, 3)

# 最终,对解密后的 enc_k1 和密文进行异或操作,还原原始的 "flag"
original_flag = xor(long_to_bytes(enc_k1), ciphertext)

# 输出还原的 "flag"
print(original_flag)
#flag{z3_s0lv3r_15_bri11i4nt}
相关推荐
样子20184 分钟前
Vue3 之dialog弹框简单制作
前端·javascript·vue.js·前端框架·ecmascript
kevin_水滴石穿5 分钟前
Vue 中报错 TypeError: crypto$2.getRandomValues is not a function
前端·javascript·vue.js
码不停蹄的玄黓11 分钟前
MySQL Undo Log 深度解析:事务回滚与MVCC的核心功臣
数据库·mysql·undo log·回滚日志
Qdgr_19 分钟前
价值实证:数字化转型标杆案例深度解析
大数据·数据库·人工智能
数据狐(DataFox)30 分钟前
SQL参数化查询:防注入与计划缓存的双重优势
数据库·sql·缓存
Arthurmoo40 分钟前
Linux系统之MySQL数据库基础
linux·数据库·mysql
博观而约取1 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
孤水寒月1 小时前
给自己网站增加一个免费的AI助手,纯HTML
前端·人工智能·html
CoderLiu1 小时前
用这个MCP,只给大模型一个figma链接就能直接导出图片,还能自动压缩上传?
前端·llm·mcp
伍哥的传说1 小时前
鸿蒙系统(HarmonyOS)应用开发之实现电子签名效果
开发语言·前端·华为·harmonyos·鸿蒙·鸿蒙系统