青少年CTF-Crypto(新手版本2.0)

这篇具有很好参考价值的文章主要介绍了青少年CTF-Crypto(新手版本2.0)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

凯撒大帝的征讨之路

题目:

lnixoa{1x2azz7w8axyva7y1z2320vxy6v97v9a}

知识点:凯撒加密

我的题解:

import base64
#shift得出移位多少,移位后的字母-移位前的字母
def caesar_decrypt(ciphertext, shift=ord('l')-ord('q')):
    str_list = list(ciphertext)
    i = 0
    while 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 += 1
    return ''.join(str_list)
str='lnixoa{1x2azz7w8axyva7y1z2320vxy6v97v9a}'
#放入需要解密的凯撒加密过的flag

kstr = caesar_decrypt(str)
print("凯撒解密后的字符串:", kstr)
#qsnctf{1c2fee7b8fcdaf7d1e2320acd6a97a9f}

PigPig

题目:

青少年CTF-Crypto(新手版本2.0)

知识点:猪圈密码

我的题解:

青少年CTF-Crypto(新手版本2.0)

 解个方程

题目:

欢迎来到青少年CTF,领取你的题目,进行解答吧!这是一道数学题!!
    p = 285938619572571413831422228101124163683
    q = 105729283011633484980933962485160648857
    e = 65537
    d = ?
    

知识点:大素数分解中求d

我的题解:

import gmpy2
from Crypto.Util.number import *
import math

p = 285938619572571413831422228101124163683
q = 105729283011633484980933962485160648857
e = 65537

n = p*q
phi = (p-1) * (q-1)
d = gmpy2.invert(e,phi)
print(d)
#5844184015344558481149339489808793528798898400213145852462349005651020126577

青少年CTF-Crypto(新手版本2.0)

ez_log

题目:

from Crypto.Util.number import *
from random import *
flag=b'key{xxxxxxx}'
m=bytes_to_long(flag)
p=3006156660704242356836102321001016782090189571028526298055526061772989406357037170723984497344618257575827271367883545096587962708266010793826346841303043716776726799898939374985320242033037
g=3
c=pow(g,m,p)
print(f'c=',c)

c=2558016376919340744861283143131342116530097815936201928079539498968035304172458942066482394126279568644520885275321026125136755531717057526144375105028343943707485572136532741715583512444233

我的题解:

 c = g^m mod p

g很小,m作为flag处于次方的位置

可以用sage

from Crypto.Util.number import *
import gmpy2
c=2558016376919340744861283143131342116530097815936201928079539498968035304172458942066482394126279568644520885275321026125136755531717057526144375105028343943707485572136532741715583512444233
p=3006156660704242356836102321001016782090189571028526298055526061772989406357037170723984497344618257575827271367883545096587962708266010793826346841303043716776726799898939374985320242033037
e=3
flag = discrete_log(Mod(c,p),Mod(g,p))
print(long_to_bytes(flag))
#b'key{f73ra1}'

青少年CTF-Crypto(新手版本2.0)

 ezrsa

题目:

from Crypto.Util.number import *
flag = b'qsnctf{xxx-xxxx-xxxx-xxxx-xxxxxxxxx}'
m = bytes_to_long(flag)
p = getPrime(512)
q = getPrime(512)
r = getPrime(512)
n = p * q * r
leak = p * q
e = 0x10001
c = pow(m, e, n)
print(f'c = {c}')
print(f'n = {n}')
print(f'leak = {leak}')
# c = 173595148273920891298949441727054328036798235134009407863895058729356993814829340513336567479145746034781201823694596731886346933549577879568197521436900228804336056005940048086898794965549472641334237175801757569154295743915744875800647234151498117718087319013271748204766997008772782882813572814296213516343420236873651060868227487925491016675461540894535563805130406391144077296854410932791530755245514034242725719196949258860635915202993968073392778882692892
# n = 1396260492498511956349135417172451037537784979103780135274615061278987700332528182553755818089525730969834188061440258058608031560916760566772742776224528590152873339613356858551518007022519033843622680128062108378429621960808412913676262141139805667510615660359775475558729686515755127570976326233255349428771437052206564497930971797497510539724340471032433502724390526210100979700467607197448780324427953582222885828678441579349835574787605145514115368144031247
# leak = 152254254502019783796170793516692965417859793325424454902983763285830332059600151137162944897787532369961875766745853731769162511788354655291037150251085942093411304833287510644995339391240164033052417935316876168953838783742499485868268986832640692657031861629721225482114382472324320636566226653243762620647

我的题解:

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

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

from Crypto.Util.number import *
import gmpy2
c = 173595148273920891298949441727054328036798235134009407863895058729356993814829340513336567479145746034781201823694596731886346933549577879568197521436900228804336056005940048086898794965549472641334237175801757569154295743915744875800647234151498117718087319013271748204766997008772782882813572814296213516343420236873651060868227487925491016675461540894535563805130406391144077296854410932791530755245514034242725719196949258860635915202993968073392778882692892
n = 1396260492498511956349135417172451037537784979103780135274615061278987700332528182553755818089525730969834188061440258058608031560916760566772742776224528590152873339613356858551518007022519033843622680128062108378429621960808412913676262141139805667510615660359775475558729686515755127570976326233255349428771437052206564497930971797497510539724340471032433502724390526210100979700467607197448780324427953582222885828678441579349835574787605145514115368144031247
leak = 152254254502019783796170793516692965417859793325424454902983763285830332059600151137162944897787532369961875766745853731769162511788354655291037150251085942093411304833287510644995339391240164033052417935316876168953838783742499485868268986832640692657031861629721225482114382472324320636566226653243762620647
e = 0x10001
r = n // leak r=9170584408726584113673965972648240491689635118606416619099032606248549219208315227501144611402976054161705877934617690915635968224924300539749199425819801 phr = r - 1 d = gmpy2.invert(e,phr) m = pow(c,d,r) print(long_to_bytes(m)) #qsnctf{12ff81e0-7646-4a96-a7eb-6a509ec01c9e}

四重加密

题目:

青少年CTF-Crypto(新手版本2.0)

我的题解:

需要找出密码,在边上有

青少年CTF-Crypto(新手版本2.0)

 CyberChef解码

青少年CTF-Crypto(新手版本2.0)

 打开后出现编码

 

&#122;&#99;&#121;&#101;&#123;&#109;&#120;&#109;&#101;&#109;&#116;&#120;&#114;&#122;&#116;&#95;&#108;&#122;&#98;&#104;&#97;&#95;&#107;&#119;&#109;&#113;&#122;&#101;&#99;&#125;&#124;&#107;&#101;&#121;&#61;&#104;&#101;&#108;&#108;&#111;

HTML解码:http://www.hiencode.com/html_en.html

青少年CTF-Crypto(新手版本2.0)

 zcye{mxmemtxrzt_lzbha_kwmqzec}|key=hello

然后进行维吉尼亚解密,我用了随波逐流

synt{yqitbfqnoixsxwpwpifoqv}

最后进行rot13解码

flag{ldvgosdabvkfkjcjcvsbdi}

(我最后两次解密使用了随波逐流暴力破解,嘻嘻#^.^#)

 factor1

题目:

import gmpy2
import hashlib
from Crypto.Util.number import *

p = getPrime(512)
q = getPrime(512)
d = getPrime(256)
e = gmpy2.invert(d, (p**2 - 1) * (q**2 - 1))
flag = "qsnctf{" + hashlib.md5(str(p + q).encode()).hexdigest() + "}"
print(e)
print(p * q)
# 4602579741478096718172697218991734057017874575484294836043557658035277770732473025335441717904100009903832353915404911860888652406859201203199117870443451616457858224082143505393843596092945634675849883286107358454466242110831071552006337406116884147391687266536283395576632885877802269157970812862013700574069981471342712011889330292259696760297157958521276388120468220050600419562910879539594831789625596079773163447643235584124521162320450208920533174722239029506505492660271016917768383199286913178821124229554263149007237679675898370759082438533535303763664408320263258144488534391712835778283152436277295861859
# 78665180675705390001452176028555030916759695827388719494705803822699938653475348982551790040292552032924503104351703419136483078949363470430486531014134503794074329285351511023863461560882297331218446027873891885693166833003633460113924956936552466354566559741886902240131031116897293107970411780310764816053

知识点:维纳攻击(特点应该是e超级大)

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

可以分为两部分代码:

给 e,n,求出 d

import gmpy2
import libnum
import hashlib
import random

def continuedFra(x, y):
    cf = []
    while y:
        cf.append(x // y)
        x, y = y, x % y
    return cf
def gradualFra(cf):
    numerator = 0
    denominator = 1
    for x in cf[::-1]:
        numerator, denominator = denominator, x * denominator + numerator
    return 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 gf

def wienerAttack(e, n):
    cf = continuedFra(e, n)
    gf = getGradualFra(cf)
    for d, k in gf:
        if k == 0: continue
        if (e * d - 1) % k != 0:
            continue
        phi = (e * d - 1) // k
        p, q = solve_pq(1, n - phi + 1, n)
        if p * q == n:
            return d

e=4602579741478096718172697218991734057017874575484294836043557658035277770732473025335441717904100009903832353915404911860888652406859201203199117870443451616457858224082143505393843596092945634675849883286107358454466242110831071552006337406116884147391687266536283395576632885877802269157970812862013700574069981471342712011889330292259696760297157958521276388120468220050600419562910879539594831789625596079773163447643235584124521162320450208920533174722239029506505492660271016917768383199286913178821124229554263149007237679675898370759082438533535303763664408320263258144488534391712835778283152436277295861859
n=78665180675705390001452176028555030916759695827388719494705803822699938653475348982551790040292552032924503104351703419136483078949363470430486531014134503794074329285351511023863461560882297331218446027873891885693166833003633460113924956936552466354566559741886902240131031116897293107970411780310764816053

d=wienerAttack(e, n**2)

print('d=',d)
#d= 63691166654760611586233830170653888570050734006064722630809918076234937115339

 d由上面代码得出,因此 e,n,d 已知,求出flag

import gmpy2
import libnum
import hashlib
import random

e=4602579741478096718172697218991734057017874575484294836043557658035277770732473025335441717904100009903832353915404911860888652406859201203199117870443451616457858224082143505393843596092945634675849883286107358454466242110831071552006337406116884147391687266536283395576632885877802269157970812862013700574069981471342712011889330292259696760297157958521276388120468220050600419562910879539594831789625596079773163447643235584124521162320450208920533174722239029506505492660271016917768383199286913178821124229554263149007237679675898370759082438533535303763664408320263258144488534391712835778283152436277295861859
n=78665180675705390001452176028555030916759695827388719494705803822699938653475348982551790040292552032924503104351703419136483078949363470430486531014134503794074329285351511023863461560882297331218446027873891885693166833003633460113924956936552466354566559741886902240131031116897293107970411780310764816053
d= 63691166654760611586233830170653888570050734006064722630809918076234937115339

k = e * d - 1

r = k
t = 0
while True:
    r = r // 2
    t += 1
    if r % 2 == 1:
        break
 
success = False
 
for i in range(1, 101):
    g = random.randint(0, n)
    y = pow(g, r, n)
    if y == 1 or y == n - 1:
        continue
 
    for j in range(1, t):
        x = pow(y, 2, n)
        if x == 1:
            success = True
            break
        elif x == n - 1:
            continue
        else:
            y = x
 
    if success:
        break
    else:
        continue
 
if success:
    p = libnum.gcd(y - 1, n)
    q = n // p
    print ('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')
#qsnctf{8072e8b2982bc729cc74ef58f1abc862}

 文章来源地址https://www.toymoban.com/news/detail-837680.html

到了这里,关于青少年CTF-Crypto(新手版本2.0)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [青少年CTF训练平台]web部分题解(已完结!)

    首先打开环境(ω。人)ZZz♪♪ 既然要做题,就要做全面了,图上说了,既然有假flag我就先找出来: 打开vmware,使用sqlmap进行处理: 记得中间的url换成自己的 看到了六个可能: {*] ctftraining [*] information_schema [*] mysql [*] performance_schema [*] test [*] word 那就挨个读取,利用指令 ”c

    2024年03月09日
    浏览(46)
  • [青少年CTF]Web—Easy CheckMe1-8 by 周末

    青少年CTF训练平台 CheckMe1-8 个人博客:https://www.st1ck4r.top/ 考点:php代码审计 给了一个输入框,先随便输点东西进去。 直接就给出了源码,分析该源码。 现在情况很明了了,我们需要传入字符串\\\"qsnctf\\\"的base64加密字符串。 利用在线网站进行加密。 传入参数。 Tips: ​ 使用ha

    2024年02月06日
    浏览(39)
  • 青少年CTF-Web-帝国CMS1-3通关记录

    本次进通过平台内题目进行,非真实环境。 首先下发题目链接 我们首先先找后台看看 后台地址为 /e/admin/ 随后,经过dirsearch进行扫描,得到了一个www.zip 访问扫描到的www.zip,得到网站源码 使用D盾扫描,得到eval后门。 蚁剑链接 得到根目录的Flag 这道题目和CMS01差不多,但是

    2024年02月03日
    浏览(35)
  • [青少年CTF]CheckMe06-07|PingMe02|2048|简简单单的题目|BASE

    使用字典对登录界面爆破 19861022 qsnctf{e2251e65-c5dd-4018-9de9-0bba832aeb44}   该题使用万能密码即可 admin\\\' or 1=1# qsnctf{a2879a99-1bbe-4602-aa55-4ef65f2d7089}   Payload:?ip=127.0.0.1|more%09/f* qsnctf{dae90dc4-4a3c-49d8-bd0a-76c6647070bb}   这题在源代码中找到 将它复制到js在线运行一下弹窗获得flag qsnctf{2a386

    2024年02月21日
    浏览(28)
  • CTF-Crypto-各种密码原理及解密方法

    一般m表示明文,c表示密文 当密钥K是“3124”,明文m是“flag{easy_easy_crypto}\\\"时 密钥变化规则表如下 明文字符位置 1 2 3 4 密文字符位置 3 1 2 4 移位密码首先会以K的长度4切分m具体如下: flag      {eas      y_ea     sy_c      rypt     o} 每一部分按照密钥变化表进行变化 lafg 

    2024年02月06日
    浏览(202)
  • 青少年软件编程C++一级真题(202212)

    1、输入一个整数x,输出这个整数加1后的值,即x+1的值。 时间限制:1000 内存限制:65536 输入 一个整数x(0 ≤ x ≤ 1000)。 输出 按题目要求输出一个整数。 样例输入 样例输出 2、给定整数a、b、c,计算(a / b)*c的值,这里的除法为实数除法。 时间限制:1000 内存限制:65536 输

    2024年02月09日
    浏览(32)
  • MLB青少年棒球培养计划·野球1号位

    MLB青少年棒球培养计划是由美国职业棒球大联盟(MLB)推出的一项计划,旨在为青少年棒球运动员提供机会,提高他们的技能水平,并帮助他们在职业棒球领域取得成功。 该计划始于2001年,是MLB旨在促进青少年棒球发展的一项重要举措。 MLB青少年棒球培养计划的主要目标是

    2023年04月20日
    浏览(33)
  • AR气象博物馆模拟体验提升青少年认知

    国际气象节主要目的是唤起人们对气象工作的重视和热爱。近年来,极端天气频发,人们需要提高警惕,AR气象远程普利用ar技术特有的沉浸式的体感互动,通过模拟演练提升体验者的安全防范意识和求生技巧。 系统结合VR虚拟现实、AR增强现实技术,详细解释风、云、雾等自

    2024年02月16日
    浏览(31)
  • 使用spring boot拦截器实现青少年模式

    便用Spring Boot拦截器采累计在线时间采实现青少年模式的步骤,可以参考以卜步骤: 1.创建一个拦截器类,实现Handlerlnterceptor 接口。 2.在拦截器类中,定义一个变量来记录用户在线时间。 3.在preHandle方法中,记录用户的登录时间。 4.在afterCompletion方法中,计算用户在线时间,

    2023年04月08日
    浏览(31)
  • 青少年中心:温湿度这个隐藏技巧,快速搞定环境安全

    青少年是一个国家未来的重要资源,他们的成长环境对于塑造其积极向上的人生轨迹至关重要。在青少年中心,我们致力于提供一个安全、温馨的学习和交流空间,让青少年们得以充分发展自己的潜力。 为了确保青少年中心的环境始终符合健康标准,需要密切关注室内温湿度

    2024年02月15日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包