密码学-->buuctf 25~36

25.RSA3

c1=22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
n=22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
e1=11187289
c2=18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
e2=9647291

题目给了两个e和两个c,想到了共模攻击
草稿:
在这里插入图片描述其中方程的解可用扩展欧几里得算法求出
解如下:
在这里插入图片描述flag{49d91077a1abcb14f1a9d546c80be9ef}
其中 如果解出来的s1和s2 有负数,就要把它变为正数
假如 是 s1 < 0,
设 c1s = c1 关于n的逆元,即 c1 ** -1
c1 ** -1 ** s1 = c1 ** abs(s1)
26.RSA2

e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657

c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751

dp泄露
草稿:
在这里插入图片描述解密
在这里插入图片描述flag{wow_leaking_dp_breaks_rsa?_98924743502}

这里有一个问题,在命令行里按上键的代码参数也是之前的???
27.异性相吸
题目如下:
在这里插入图片描述把密文拖入16进制查看器看一下,数了下正好38个值,数了下正好密钥也是38个字符
在这里插入图片描述

难道是按位异或?毕竟题目叫异性相吸

在这里插入图片描述flag{ea1bc0988992276b7f95b54a7435e89e}
28.RSA
题目给了俩文件,一个pub.key 公钥文件,flag.enc 加密文件
在线公钥解析
在这里插入图片描述也可openssl解析
在这里插入图片描述
windows下的openssl 可能不是那么好用
得到了模数和公钥
上数据库查下模数分解
在这里插入图片描述那就正常rsa解密了

# -*- coding: utf-8 -*-
from Crypto.Util.number import *
import gmpy2

f = open('flag.enc','rb')
c = bytes_to_long(f.read())
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
e = 65537
n = p*q
phi = (p-1) * (q-1)
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
print(long_to_bytes(m))

读文件最好用rb模式

flag{decrypt_256}
29.还原大师
题目:
我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4DAB???08???51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。 注意:得到的 flag 请包上 flag{} 提交
穷举攻击就行

from hashlib import md5
key = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in key:
    for j in key:
        for k in key:
            s = 'TASC'+i+'O3RJMV'+j+'WDJKX'+k+'ZM'
            m = md5()
            m.update(s.encode('utf-8'))     #注意转码
            res = m.hexdigest()
            if 'e903' in res and '4dab' in res and '08' in res and '51' in res and '80' in res and '8a' in res:
                print(res)
                break
            

flag{E9032994DABAC08080091151380478A2}
30.RSAROLL
在这里插入图片描述常规rsa解密,下面的数字一个代表一个字符
m可以yafu也可以数据库

import gmpy2
p = 49891
q = 18443
e = 19
l = [704796792,
752211152,
274704164,
18414022,
368270835,
483295235,
263072905,
459788476,
483295235,
459788476,
663551792,
475206804,
459788476,
428313374,
475206804,
459788476,
425392137,
704796792,
458265677,
341524652,
483295235,
534149509,
425392137,
428313374,
425392137,
341524652,
458265677,
263072905,
483295235,
828509797,
341524652,
425392137,
475206804,
428313374,
483295235,
475206804,
459788476,
306220148]
flag = ''
phi = (p-1) * (q-1)
d = gmpy2.invert(e,phi)
n = p*q
for i in l:
    m = pow(i,d,n)
    flag+=chr(m)
print(flag)

flag{13212je2ue28fy71w8u87y31r78eu1e2}
31.robomunication
一段mp3 听了是哔啵哔啵。。。。
猜是摩斯
在这里插入图片描述
flag{BOOPBEEP}
32.Unencode
题目都说了unencode那就unencode 在线解码咯
在这里插入图片描述
flag{dsdasdsa99877LLLKK}
33.[AFCTF2018]Morse
一看题目就摩斯解码
先摩斯再base16
在这里插入图片描述在这里插入图片描述flag{1s’t_s0_345y}

34.Dangerous RSA

#n:  0x52d483c27cd806550fbe0e37a61af2e7cf5e0efb723dfc81174c918a27627779b21fa3c851e9e94188eaee3d5cd6f752406a43fbecb53e80836ff1e185d3ccd7782ea846c2e91a7b0808986666e0bdadbfb7bdd65670a589a4d2478e9adcafe97c6ee23614bcb2ecc23580f4d2e3cc1ecfec25c50da4bc754dde6c8bfd8d1fc16956c74d8e9196046a01dc9f3024e11461c294f29d7421140732fedacac97b8fe50999117d27943c953f18c4ff4f8c258d839764078d4b6ef6e8591e0ff5563b31a39e6374d0d41c8c46921c25e5904a817ef8e39e5c9b71225a83269693e0b7e3218fc5e5a1e8412ba16e588b3d6ac536dce39fcdfce81eec79979ea6872793L
#e:  0x3
#c:0x10652cdfaa6b63f6d7bd1109da08181e500e5643f5b240a9024bfa84d5f2cac9310562978347bb232d63e7289283871efab83d84ff5a7b64a94a79d34cfbd4ef121723ba1f663e514f83f6f01492b4e13e1bb4296d96ea5a353d3bf2edd2f449c03c4a3e995237985a596908adc741f32365
so,how to get the message?

看到e等于3就想到了小指数rsa

from gmpy2 import iroot
import libnum

n=0x52d483c27cd806550fbe0e37a61af2e7cf5e0efb723dfc81174c918a27627779b21fa3c851e9e94188eaee3d5cd6f752406a43fbecb53e80836ff1e185d3ccd7782ea846c2e91a7b0808986666e0bdadbfb7bdd65670a589a4d2478e9adcafe97c6ee23614bcb2ecc23580f4d2e3cc1ecfec25c50da4bc754dde6c8bfd8d1fc16956c74d8e9196046a01dc9f3024e11461c294f29d7421140732fedacac97b8fe50999117d27943c953f18c4ff4f8c258d839764078d4b6ef6e8591e0ff5563b31a39e6374d0d41c8c46921c25e5904a817ef8e39e5c9b71225a83269693e0b7e3218fc5e5a1e8412ba16e588b3d6ac536dce39fcdfce81eec79979ea6872793
e=  0x3
c=0x10652cdfaa6b63f6d7bd1109da08181e500e5643f5b240a9024bfa84d5f2cac9310562978347bb232d63e7289283871efab83d84ff5a7b64a94a79d34cfbd4ef121723ba1f663e514f83f6f01492b4e13e1bb4296d96ea5a353d3bf2edd2f449c03c4a3e995237985a596908adc741f32365

k = 0

while 1:
    res=iroot(c+k*n,e)
    if(res[1]==True):
        print(libnum.n2s(int(res[0])))
        break
    k=k+1


明文过小,直接开三次方也行
flag{25df8caf006ee5db94d48144c33b2c3b}
35.Cipher
还能提示什么呢?公平的玩吧(密钥自己找) Dncnoqqfliqrpgeklwmppu 注意:得到的 flag 请包上 flag{} 提交, flag{小写字母}
开始没出,看wp 知道
“公平的玩”-playfair
。。。。
英语不好有多惨
在线解密
flag{itisnotaproblemhavefun}
36.[HDCTF2019]basic rsa

import gmpy2
from Crypto.Util.number import *
from binascii import a2b_hex,b2a_hex

flag = "*****************"

p = 262248800182277040650192055439906580479
q = 262854994239322828547925595487519915551

e = 65533
n = p*q


c = pow(int(b2a_hex(flag),16),e,n)

print c

# 27565231154623519221597938803435789010285480123476977081867877272451638645710

p q都知道了,一把梭

import gmpy2
import libnum
p = 262248800182277040650192055439906580479
q = 262854994239322828547925595487519915551
c = 27565231154623519221597938803435789010285480123476977081867877272451638645710
e = 65533
phi = (p-1) * (q-1)
d = gmpy2.invert(e,phi)
n = p*q
m = pow(c,d,n)
print(libnum.n2s(int(m)))

flag{B4by_Rs4}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值