青少年CTF练习平台Crypto题解

四重加密

下载附件后,得到一个rar文件,发现被加密,无法解压

使用Bandizip打开

注释中有段编码OFZW4Y3UMY======

CyberChef

base64解码得到第一层压缩包密码

qsnctf

打开后有一个文本文档

内容如下

zcye{mxmemtxrzt_lzbha_kwmqzec}|key=hello      

NCR,HTML解码

得到一串密文和key

zcye{mxmemtxrzt_lzbha_kwmqzec}|key=hello

维吉尼亚解码

维吉尼亚加密/解密 - Bugku CTF

得到synt{yqitbfqnoi_xsxwp_wpifoqv}

根据题目提示四重加密,应该还有一层

ROT13解码

CTF在线工具-在线Rot13密码加密|在线Rot13密码解密|Rot13密码算法|Rot13 Cipher (hiencode.com)

得到flag

根据题目要求改下壳

qsnctf{ldvgosdabv_kfkjc_jcvsbdi}

factor1

下载解压,打开附件查看

维纳攻击(特点是e超级大)

e超级大,先求出d,然后e,n,d已知,求p,q

可以分为两部分代码:

给 e,n,求出 d

import gmpy2
import libnum
import hashlib
import randomdef continuedFra(x, y):cf = []while y:cf.append(x // y)x, y = y, x % yreturn cf
def gradualFra(cf):numerator = 0denominator = 1for x in cf[::-1]:numerator, denominator = denominator, x * denominator + numeratorreturn numerator, denominator
def solve_pq(a, b, c):par = gmpy2.isqrt(b * b - 4 * a * c)return (-b + par) // (2 * a), (-b - par) // (2 * a)
def getGradualFra(cf):gf = []for i in range(1, len(cf) + 1):gf.append(gradualFra(cf[:i]))return gfdef wienerAttack(e, n):cf = continuedFra(e, n)gf = getGradualFra(cf)for d, k in gf:if k == 0: continueif (e * d - 1) % k != 0:continuephi = (e * d - 1) // kp, q = solve_pq(1, n - phi + 1, n)if p * q == n:return de=4602579741478096718172697218991734057017874575484294836043557658035277770732473025335441717904100009903832353915404911860888652406859201203199117870443451616457858224082143505393843596092945634675849883286107358454466242110831071552006337406116884147391687266536283395576632885877802269157970812862013700574069981471342712011889330292259696760297157958521276388120468220050600419562910879539594831789625596079773163447643235584124521162320450208920533174722239029506505492660271016917768383199286913178821124229554263149007237679675898370759082438533535303763664408320263258144488534391712835778283152436277295861859
n=78665180675705390001452176028555030916759695827388719494705803822699938653475348982551790040292552032924503104351703419136483078949363470430486531014134503794074329285351511023863461560882297331218446027873891885693166833003633460113924956936552466354566559741886902240131031116897293107970411780310764816053d=wienerAttack(e, n**2)print('d=',d)

运行后得到d

#d= 63691166654760611586233830170653888570050734006064722630809918076234937115339

因此 e,n,d 已知,求出flag

import gmpy2
import libnum
import hashlib
import randome=4602579741478096718172697218991734057017874575484294836043557658035277770732473025335441717904100009903832353915404911860888652406859201203199117870443451616457858224082143505393843596092945634675849883286107358454466242110831071552006337406116884147391687266536283395576632885877802269157970812862013700574069981471342712011889330292259696760297157958521276388120468220050600419562910879539594831789625596079773163447643235584124521162320450208920533174722239029506505492660271016917768383199286913178821124229554263149007237679675898370759082438533535303763664408320263258144488534391712835778283152436277295861859
n=78665180675705390001452176028555030916759695827388719494705803822699938653475348982551790040292552032924503104351703419136483078949363470430486531014134503794074329285351511023863461560882297331218446027873891885693166833003633460113924956936552466354566559741886902240131031116897293107970411780310764816053
d= 63691166654760611586233830170653888570050734006064722630809918076234937115339k = e * d - 1r = k
t = 0
while True:r = r // 2t += 1if r % 2 == 1:breaksuccess = Falsefor i in range(1, 101):g = random.randint(0, n)y = pow(g, r, n)if y == 1 or y == n - 1:continuefor j in range(1, t):x = pow(y, 2, n)if x == 1:success = Truebreakelif x == n - 1:continueelse:y = xif success:breakelse:continueif success:p = libnum.gcd(y - 1, n)q = n // pprint ('P: ' + '%s' % p)print ('Q: ' + '%s' % q)hash_result = hashlib.md5(str(p + q).encode()).hexdigest()print(b'qsnctf{' + hash_result.encode() + b'}')#qsnctf  注意格式问题
else:print ('Cannot compute P and Q')

运行

得到flag

qsnctf{8072e8b2982bc729cc74ef58f1abc862}

 凯撒大帝的征讨之路

下载解压,打开附件

lnixoa{1x2azz7w8axyva7y1z2320vxy6v97v9a}

使用在线工具,枚举解密后,观察前缀

得到flag

qsnctf{1c2fee7b8fcdaf7d1e2320acd6a97a9f}

也有大佬编写脚本

import base64
def caesar_decrypt(ciphertext, shift=ord('l')-ord('q')):str_list = list(ciphertext)i = 0while i < len(ciphertext):if str_list[i].isalpha():a = "A" if str_list[i].isupper() else "a"str_list[i] = chr((ord(str_list[i]) - ord(a) - shift) % 26 + ord(a))i += 1return ''.join(str_list)
str='lnixoa{1x2azz7w8axyva7y1z2320vxy6v97v9a}'kstr = caesar_decrypt(str)
print( kstr)

运行得到flag

PigPig

解压打开文件

明显,猪圈密码

猪圈密码解密-ME2在线工具 (metools.info)

使用qsnctf{}包裹,得到flag

ez_log

题目提示:

注意:请将 key提交到页面内,flag提交到这里来!

打开环境

下载附件

离散对数求解问题

逆着求m,对应log函数

bytes_to_long就相当于将字符串转为对应的十进制数,逆着为将得到的十进制计算转成十六进制,然后每两位对应一个ascii对应的值

使用sage解决

【SageMath】SageMath在Windows系统下的安装_sagemath下载-CSDN博客

SageMath的新手保姆使用教程-CSDN博客

但是报错了

尝试编写脚本解码

from Crypto.Util.number import *
import gmpy2
c=
p=
e=
flag = discrete_log(Mod(c,p),Mod(g,p))
print(long_to_bytes(flag))

依旧报错,上网查找后仍未找到解决方法。

2024青少年ctf擂台挑战赛round1-ez_log-CSDN博客

解个方程

打开环境

下载附件

原理并不难,已知p,q,e求d。简单的rsa

编写脚本

import gmpy2
p = 
q = 
e = 
d = gmpy2.invert(e,(p-1)*(q-1))
print (d)

运行后得到d的值

3329454741722665379221589859424442066510389387278937517925862105079709647873

提交d值后,得到flag

ezrsa

下载解压,打开附件

n分解出q、p、r,但是多因子解码不可信。

可以得出单个r,进行r的简单RSA计算

编写脚本

from Crypto.Util.number import *
import gmpy2
c = 173595148273920891298949441727054328036798235134009407863895058729356993814829340513336567479145746034781201823694596731886346933549577879568197521436900228804336056005940048086898794965549472641334237175801757569154295743915744875800647234151498117718087319013271748204766997008772782882813572814296213516343420236873651060868227487925491016675461540894535563805130406391144077296854410932791530755245514034242725719196949258860635915202993968073392778882692892
n = 1396260492498511956349135417172451037537784979103780135274615061278987700332528182553755818089525730969834188061440258058608031560916760566772742776224528590152873339613356858551518007022519033843622680128062108378429621960808412913676262141139805667510615660359775475558729686515755127570976326233255349428771437052206564497930971797497510539724340471032433502724390526210100979700467607197448780324427953582222885828678441579349835574787605145514115368144031247
leak = 152254254502019783796170793516692965417859793325424454902983763285830332059600151137162944897787532369961875766745853731769162511788354655291037150251085942093411304833287510644995339391240164033052417935316876168953838783742499485868268986832640692657031861629721225482114382472324320636566226653243762620647
e = 0x10001r = n // leak
r=9170584408726584113673965972648240491689635118606416619099032606248549219208315227501144611402976054161705877934617690915635968224924300539749199425819801phr = r - 1
d = gmpy2.invert(e,phr)
m = pow(c,d,r)
print(long_to_bytes(m))

运行

得到flag

qsnctf{12ff81e0-7646-4a96-a7eb-6a509ec01c9e}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/706720.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下mysql备份

参考文章&#xff1a; Linux实现MySQL数据库数据自动备份&#xff0c;并定期删除以前备份文件-CSDN博客文章浏览阅读7.2k次&#xff0c;点赞7次&#xff0c;收藏29次。引言在学习过程中遇到了一个问题&#xff0c;见图&#xff1a;当我进入服务器的数据库时&#xff0c;原来的…

国内用户如何免费抢先体验GPT-4o(国内如何免费使用各类GPT产品,包含chatgpt、claude、Gemini等)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 GPT-4o抢先体验 📒📝 方法介绍🎈 永久免费🎈 其他工具⚓️ 相关链接 ⚓️📖 介绍 📖 “OpenAI的最新突破——GPT-4o已经到来,国内用户如何免费体验这一AI革命性产品?” 随着OpenAI的GPT-4o模型的发布,全球AI领域…

JavaScript对象设计哲学:八种模式塑造高效代码

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言 &#x1f680;二、Object 构造函数 &#x1f9f1;&#x1f4cc; 基本用法&#x1f4cc; 重要性&#x1f4cc; 实际应用案例 三、对象字面量 &#x1f4d8;&#x1f4cc; 定义属性&#x1f4cc; 定义方法&#x1f4…

Linux ps命令详细参数

一、简介 在Linux系统中&#xff0c;ps(Process Status的缩写)命令常常用来用来列出系统中当前运行的进程。ps命令列出的是当前那些进程的快照&#xff0c;就是执行ps命令的那个时刻的那些进程&#xff0c;如果想要动态的显示进程信息&#xff0c;就可以使用top命令。要对进程…

亚马逊Prime Day旺季备货遭遇美国海关查验高峰,应对策略全攻略!

随着全球化贸易的日益繁荣&#xff0c;跨境电商企业在旺季备货时面临着巨大的挑战&#xff0c;尤其是当遇到美国海关查验潮时&#xff0c;如何应对成为众多商家关注的焦点。本文将从分析美国海关查验的原因入手&#xff0c;为商家提供一系列应对策略和建议。 一、美国海关查验潮…

Python | Leetcode Python题解之第86题分隔链表

题目&#xff1a; 题解&#xff1a; class Solution:def partition(self, head: Optional[ListNode], x: int) -> Optional[ListNode]:sml_dummy, big_dummy ListNode(0), ListNode(0)sml, big sml_dummy, big_dummywhile head:if head.val < x:sml.next headsml sm…

echers配置项:数据过多时,折叠数据缩放查看

当数据过多时&#xff0c;如上图所示的时间点&#xff0c;会自动折叠&#xff0c;此时鼠标缩放还不起作用&#xff0c;我们配置如下代码 let option {dataZoom: [{startValue: 05:00}, // 这个值需要跟 第一条 时间数据对应上{type: inside}], }配置后&#xff0c;就可以进行…

NodeJS V8引擎内存和垃圾回收器

关于max_old_space_size max_old_space_size参数用于指定V8引擎的老生代内存的最大大小。通过增加max_old_space_size参数的值&#xff0c;我们可以提供更多的内存给V8引擎&#xff0c;从而提高应用程序的性能和稳定性。 既然提到了老生代&#xff0c;就不得不提下什么是垃圾&…

项目管理重点及笔记【太原理工大学24年】

为了自己复习写的&#xff0c;可能会有不清楚&#xff0c;可以选择性看可以讨论&#xff0c;但别骂我写的什么烂东西&#xff0c;&#xff0c;&#xff0c;&#xff08;电脑看排版更好看些&#xff09; 目录 一、IT项目管理概述 二、IT项目组织环境与管理过程 三、整体管理 四、…

5W 3KVAC隔离 宽电压输入 AC/DC 电源模块——TP05AL系列

TP05AL系列产品是一款经济型开板式开关电源&#xff0c;输出功率为5W&#xff0c;具有可靠性高、小体积、性价比高等特点&#xff0c;广泛用于工控和电力仪器、仪表、智能家居等相关行业。

LeetCode-1953. 你可以工作的最大周数【贪心 数组】

LeetCode-1953. 你可以工作的最大周数【贪心 数组】 题目描述&#xff1a;解题思路一&#xff1a;贪心&#xff0c;关键点是找到(工作最长时间的工作longest )与(剩余其他工作加起来的时间总和rest )的关系。解题思路二&#xff1a;证明解题思路三&#xff1a;简化 题目描述&am…

PM入门必备| 怎么写产品分析报告?

​小陪老师&#xff0c;产品经理是做些什么的呢&#xff1f;我去面试应该准备些什么呢&#xff1f; A: 首先要分清产品经理的类型&#xff0c;产品的面试需要准备的一般有Axure原型&#xff0c;需求文档&#xff0c;产品分析报告等&#xff0c;有些甚至需要展示项目经验。 tea…