[RITSEC CTF 2025] Crypto
这个忘打了,难度不小。
Alien Encryption 101
一个很小的RSA,略
Cuwves 2 Electric Boogaloo
已知p,在p^2下的两个椭圆曲线的j不变量,直接用函数
Mothership
AES_CBC加密给出密文和IV,通过调整IV来修改明文
import base64
import os
import signalfrom Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpadCOORDS = open("coordinates.txt").read().strip()def encrypt(message, key, iv):cipher = AES.new(key, AES.MODE_CBC, iv)padded = pad(message.encode(), AES.block_size)ciphertext = cipher.encrypt(padded)return base64.b64encode(iv + ciphertext).decode()def validate(data, key):try:data = base64.b64decode(data)iv = data[:16]ciphertext = data[16:]cipher = AES.new(key, AES.MODE_CBC, iv)decrypted = unpad(cipher.decrypt(ciphertext), AES.block_size).decode()return decrypted == "SHIP:FIRE"except:print("Invalid transmission.")raise SystemExit(1)def main():print("=== Alien Transmission System ===")print("Welcome to the transmission system.")signal.alarm(11)for i in range(200):key = os.urandom(16)iv = os.urandom(16)print("\nSAFE TRANSMISSION:", encrypt("SHIP:SAFE", key, iv))data = input("SEND TRANSMISSION: ")if not validate(data, key):print("Safe transmission received. Exiting.")returnprint(f"Attack transmission received ({i + 1}/200). Continue to confirm.")print("Attack mode initiated. Ship coordinates:", COORDS)if __name__ == "__main__":main()
from base64 import b64encode,b64decode
from pwn import *
context.log_level = 'debug'p = remote('mothership.ctf.ritsec.club', 31750)for i in range(200):p.recvuntil(b':')enc = b64decode(p.recvline().strip().decode())niv = xor(enc[:16], b'SHIP:FIRE'.ljust(16,b'\0'), b'SHIP:SAFE'.ljust(16,b'\0'))p.sendline(b64encode(niv+enc[16:]))p.recvline()
p.interactive()
不过这个远程有计时,而速度又很慢最多到195总是到不了200
Leaky ZKP
又一个脑筋急转弯的题。前一半看似DLP,p不是strong的,所以可以出来小因子,解出小模下的解,多次可以得到flag。后一半看是hnp (B*x+t = A)其中B自己输入,A给出。问题是这里没有取模,所以当B输入大值时,就能忽略t
#!/usr/local/bin/pythonfrom os import urandom, getenv
from secrets import randbelow
from Crypto.Util.number import getPrime, bytes_to_longFLAG = getenv('FLAG', 'MetaCTF{test_flag}').encode()def main():p = getPrime(512)k = 32x = bytes_to_long(FLAG + urandom(64 - len(FLAG)))g = 3h = pow(g, x, p)print('Let me prove to you in *zero-knowledge* that I know the discrete log of h!')print(f'{p = }')print(f'{g = }')print(f'{h = }')# 1. Prover (me) chooses random r_i for i = 1, 2, ..., k and sends each g^r_iR = [randbelow(p) for _ in range(k)]print([pow(g, r_i, p) for r_i in R])# 2. Verifier (you) chooses and sends random bits b_i for i = 1, 2, ..., kB = [int(b_i) for b_i in input(f'Send b_1, b_2, ..., b_{k}: ').split(',')]assert len(B) == k and all(b_i >= 0 for b_i in B)# 3. Prover (me) computes z_i = r_i + b_i x for i = 1, 2, ..., k and sends each z_iZ = [r_i + b_i * x for r_i, b_i in zip(R, B)]print(Z)# 4. Verifier (you) has sufficient information to be convinced that I truly know the discrete log!print('With that, you can verify that I know the discrete log, and you will have learnt nothing about my secret!')if __name__ == '__main__':main()
输入 [2**512]+[1]*31拿第1个结果直接右移512位即可。
Bitstream Breach
这个就算没作完(代码太多,略)
给了一堆看不懂的代码。大概看懂以后加密分4部分
1,把64位key转为key1,再key1转为key2,再转为key3由于key已知所以这3个已知
2,把输入进行换位
3,作3轮 l,r=>r,r^k^l 每次用1个key
4,把结果进行第2次换位
看似不难,可转来转去,不知道该提交啥。
#keygen
key = 0xFEDCBA9876543210
skey = bin(key)[2:]
#keycompress 64->32
cp = [10,35,38,13,3,60,9,62,7,43,45,44,34,12,54,24,26,42,41,18,8,31,50,32,17,56,47,0,46,49,27,48]
#kp
kp = [31,11,22,25,21,28,0,19,12,14,17,10,6,9,20,18,24,1,7,26,23,15,27,4,29,5,2,3,30,16,13,8]
#ip
ip = [57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,56,48,40,32,24,16,8,0,58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6]
#fp
fp = [39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25,32,0,40,8,48,16,56,24]
#31 30 ... 0 从高位到低位
kcomp_s = ''.join([skey[63-cp[i]] for i in range(32)])[::-1]key1 = kcomp_s
krot1_s = kcomp_s[-21:]+ kcomp_s[:11]kperm1_s = ''.join([krot1_s[31-kp[i]] for i in range(32)])[::-1]
key2 = kperm1_skrot2_s = kperm1_s[-6:]+kperm1_s[:-6]key3 = ''.join([krot2_s[31-kp[i]] for i in range(32)])[::-1]def sxor(a,b):return ''.join([str(int(a[i])^int(b[i])) for i in range(32)])enc = 0x3EA8A2CD3A1C7DE221A48BAD307C7DDA
senc = bin(enc)[2:].zfill(128)
#0x920bd05154bc2173ee3b75d17d3c2193
后边就更看不懂了。
相关文章:
[RITSEC CTF 2025] Crypto
这个忘打了,难度不小。 Alien Encryption 101 一个很小的RSA,略 Cuwves 2 Electric Boogaloo 已知p,在p^2下的两个椭圆曲线的j不变量,直接用函数 Mothership AES_CBC加密给出密文和IV,通过调整IV来修改明文 import base64 …...
算法250327题目
1114: 4006 AB问题 题目描述 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号,隔开。 现在请计算AB的结果,并以正常形式输出。 输入 输入包含多组数据,每组数据占一行,由两个整数A和B组成&am…...
PGP实现简单加密教程
模拟情景: 假设001和002两位同学的电脑上都安装了PGP,现在两人需要进行加密通讯。 一、创建密钥 1.新建密钥,输入名称和邮箱,输入8位口令,根据指示完成。 2.将其添加到主密钥,鼠标右击出现选项。 这里出…...
7.8 窗体间传递数据
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 当项目中有多个窗体时(在本节中为两个窗体:Form1和Form2),窗体间传递数据有以下几种方…...
一文了解 MCP Server:AI 工具与外部世界的桥梁
引言 随着大语言模型(LLM)的普及与 AI Agent 的爆发,Anthropic 于 2024 年底提出并开源的 Model Context Protocol(MCP,模型上下文协议)成为构建智能体系统的关键基石之一。本文将结合最新的实战经验&#…...
【redis】集群 数据分片算法:哈希求余、一致性哈希、哈希槽分区算法
文章目录 什么是集群数据分片算法哈希求余分片搬运 一致性哈希扩容 哈希槽分区算法扩容相关问题 什么是集群 广义的集群,只要你是多个机器,构成了分布式系统,都可以称为是一个“集群” 前面的“主从结构”和“哨兵模式”可以称为是“广义的…...
基于Springboot的网上订餐系统 【源码】+【PPT】+【开题报告】+【论文】
网上订餐系统是一个基于Java语言和Spring Boot框架开发的Web应用,旨在为用户和管理员提供一个便捷的订餐平台。该系统通过简化餐饮订购和管理流程,为用户提供快速、高效的在线订餐体验,同时也为管理员提供完善的后台管理功能,帮助…...
Redis常见面试问题汇总
Redis 面试笔记整理 一、Redis 基础知识1. Redis 概述Redis 是什么?主要特点有哪些?Redis 和 Memcached 的区别是什么?Redis 是单线程还是多线程?为什么单线程还能高效?Redis 6.0 之后的多线程模型是怎样的?…...
【redis】集群 如何搭建集群详解
文章目录 集群搭建1. 创建目录和配置2. 编写 docker-compose.yml完整配置文件 3. 启动容器4. 构建集群超时 集群搭建 基于 docker 在我们云服务器上搭建出一个 redis 集群出来 当前节点,主要是因为我们只有一个云服务器,搞分布式系统,就比较…...
NLP高频面试题(二十)——flash attention原理
FlashAttention是一种针对Transformer模型中自注意力机制的优化算法,旨在提高计算效率并降低内存占用,特别适用于处理长序列任务。 在Transformer架构中,自注意力机制的计算复杂度和内存需求随着序列长度的平方增长。这意味着当处理较长序列时…...
飞牛NAS本地部署小雅Alist结合内网穿透实现跨地域远程在线访问观影
文章目录 前言1. VMware安装飞牛云(fnOS)1.1 打开VMware创建虚拟机1.3 初始化系统 2. 飞牛云搭建小雅Alist3. 公网远程访问小雅Alist3.1 安装Cpolar内网穿透3.2 创建远程连接公网地址 4. 固定Alist小雅公网地址 前言 嘿,小伙伴们,…...
Episode, time step, batch, epoch
1. Episode(回合) 回合(episode)表示智能体从开始执行任务到完成任务(例如成功到达目标或触发失败条件)的全过程。 例如,如果我们训练一个四足机器人走到一个目标点,一个回合就是从…...
Linux版本控制器Git【Ubuntu系统】
文章目录 **前言**一、版本控制器二、Git 简史三、安装 Git四、 在 Gitee/Github 创建项目五、三板斧1、git add 命令2、git commit 命令3、git push 命令 六、其他1、git pull 命令2、git log 命令3、git reflog 命令4、git stash 命令 七、.ignore 文件1、为什么使用 .gitign…...
browser-use 库网页元素点击测试工具
目录 代码代码解释输出结果 代码 import asyncio import jsonfrom browser_use.browser.browser import Browser, BrowserConfig from browser_use.dom.views import DOMBaseNode, DOMElementNode, DOMTextNode from browser_use.utils import time_execution_syncclass Eleme…...
Vue 中使用 ECharts
在 Vue 中使用 ECharts 主要分为以下步骤,结合代码示例详细说明: 1. 安装 ECharts 通过 npm 或 yarn 安装 ECharts: npm install echarts --save # 或 yarn add echarts2. 基础使用(完整引入) 在 Vue 组件中使用 &…...
Spring AI + DeepSeek 构建大模型应用 Demo
Spring AI + DeepSeek 构建大模型应用 Demo 下面我将展示如何使用 Spring AI 框架结合 DeepSeek 的大模型能力构建一个简单的 AI 应用。 1. 环境准备 首先确保你已安装: JDK 17+Maven 3.6+Spring Boot 3.2+2. 创建 Spring Boot 项目 使用 Spring Initializr 创建项目,添加…...
解决GitLab无法拉取项目
1、验证 SSH 密钥是否已生成 ls ~/.ssh/ 如果看到类似 id_rsa 和 id_rsa.pub 的文件,则说明已存在 SSH 密钥。 避免麻烦,铲掉重来最方便。 如果没有,请生成新的 SSH 密钥: ssh-keygen -t rsa -b 4096 -C "your_emailexam…...
POSIX 线程取消与资源清理完全指南
POSIX 线程取消与资源清理完全指南 引言:为什么需要线程取消机制? 在多线程编程中,优雅地终止线程并确保资源释放是开发者面临的重要挑战。直接终止线程可能导致内存泄漏、文件未关闭等问题。POSIX 线程库提供了一套完整的线程取消和清理机…...
FPGA学习篇——Verilog学习之寄存器的实现
1 寄存器理论 这里在常见的寄存器种加了一个复位信号sys_rst_n。(_n后缀表示复位信号低电平有效,无这个后缀的则表示高电平有效) 这里规定在时钟的上升沿有效,只有当时钟的上升沿来临时,输出out 才会改变,…...
Cursor异常问题全解析-无限使用
title: Cursor异常问题全解析无限使用 tags: cursor categories:aiai编程 mathjax: true description: Cursor异常问题全解析与解决方案大全 abbrlink: 64908bd0 date: 2025-03-19 14:48:32 🤖 Assistant 🚨 Cursor异常问题全解析与解决方案大全 &…...
【VUE】ant design vue实现表格table上下拖拽排序
适合版本:ant design vue 1.7.8 实现效果: 代码: <template><div class"table-container"><a-table:columns"columns":dataSource"tableData":rowKey"record > record.id":row…...
Vue实现动态数据透视表(交叉表)
需求:需要根据前端选择的横维度、竖维度、值去生成一个动态的表格,然后把交叉的值放入到对应的横维度和竖维度之下,其实就是excel里面的数据透视表功能,查询交叉语句为sql语句。 实现页面: 选择一下横维度、竖维度、值之后点击查…...
推荐《人工智能算法》卷1、卷2和卷3 合集3本书(附pdf电子书下载)
今天,咱们就一同深入探讨人工智能算法的卷1、卷2和卷3,看看它们各自蕴含着怎样的奥秘,并且附上各自的pdf电子版免费下载地址。 《人工智能算法(卷1):基础算法》 下载地址:https://www.panziye…...
元宇宙浪潮下,数字孪生如何“乘风破浪”?
在当今科技飞速发展的时代,元宇宙的概念如同一颗璀璨的新星,吸引了全球的目光。元宇宙被描绘为一个平行于现实世界、又与现实世界相互影响且始终在线的虚拟空间,它整合了多种前沿技术,为人们带来沉浸式的交互体验。而数字孪生&…...
WPF 附加属性
在WPF(Windows Presentation Foundation)中,附加属性(Attached Properties)是一种特殊的依赖属性机制,它允许父元素为子元素提供额外的属性支持。这种特性特别适用于布局系统、输入处理和其他需要跨多个控件…...
数据分析 之 怎么看懂图 一
韦恩图怎么看 ①颜色:不同颜色代表不同的集合 ②)颜色重叠部分:表示相交集合共有的元素 ③颜色不重叠的部分:表示改集合独有的元素 ④数字:表示集合独有或共有的元素数量 ⑤百分比:表示该区域元素数占整体的比例 PCA图怎么看 ① 第一主成分坐标轴及主成分贡献率主成分贡献…...
手写数据库MYDB(一):项目启动效果展示和环境配置问题说明
1.项目概况 这个项目实际上就是一个轮子项目,现在我看到的这个市面上面比较火的就是这个首先RPC,好多的机构都在搞这个,还有这个消息队列之类的,但是这个是基于MYSQL的,我们知道这个MYSQL在八股盛宴里面是重点考察对象…...
深入理解椭圆曲线密码学(ECC)与区块链加密
椭圆曲线密码学(ECC)在现代加密技术中扮演着至关重要的角色,广泛应用于区块链、数字货币、数字签名等领域。由于其在提供高安全性和高效率上的优势,椭圆曲线密码学成为了数字加密的核心技术之一。本文将详细介绍椭圆曲线的基本原理…...
使用 PowerShell 脚本 + FFmpeg 在 Windows 系统中批量计算 MP4视频 文件的总时长
步骤 1:安装 FFmpeg 访问 FFmpeg 官网(Download FFmpeg),下载 Windows 版编译包(如 ffmpeg-release-full.7z)。或者到(https://download.csdn.net/download/zjx2388/90539014)下载完整资料 解压文件&#…...
中医气血精津辨证
中医气血精津辨证 一、气血精津辨证概述 基本概念: 气血精津是构成人体和维持生命活动的基本物质,其生成、运行、输布与脏腑功能密切相关。辨证核心:通过分析气血精津的盛衰、运行障碍及其相互关系,判断疾病本质。 生理关系&…...
