第四届浙江省大学生CTF省赛决赛部分题

CRYPTO

3-1
Decode_and_decode

直接上脚本,base系列解码

import base64 
with open(r'C:\Users\62759\Desktop\省赛2\decode_and_decode 的附件
12.txt','r')as f:  #文件路径 
    for a in f: 
        while 1: 
            try: 
                a=base64.b64decode(a).decode("utf-8") 
            except: 
                pass 
            try: 
                a=base64.b32decode(a).decode("utf-8") 
            except: 
                pass 
            try: 
                a=base64.b16decode(a).decode("utf-8") 
            except: 
                pass 
            if '{' in a:  #设置结果中带有的字符比如{ flag 之类的 
                print(a) 
                break

结果比赛的时候忘记截图了

3-2
dssssa1
题目

from Crypto.Util.number import *
import random
from gmpy2 import *
from hashlib import sha1
from secret import flag
m = bytes_to_long(flag)
q = getPrime(160)

while True:
    p = getPrime(1024)
    if (p-1) % q == 0:
        break
        
h = random.randint(1, p-2)   

g = powmod(h, (p-1)//q, p)
x = random.randint(1, q-1)
y = powmod(g, x, p)

k = random.randint(1, q-1)
h = bytes_to_long(sha1(flag).digest())
r = powmod(g, k, p) % q
s = (h + x*r) * invert(k, q) % q

c = powmod(m, x, p*q)

print(p, q, g, y, h, r, s, c, k, sep=',')

# 94515040220263097875872541668071470619435707358211716562219917331797767488022053087267566586709944785329708571559126640339609375166385904147189950035630910404534642622114804635856314928438531544553236458244225698694846607333226704467932079712515971615643868209281460429629880920550469170449935295454629293399,1001535514136994695529636128311212301250326767869,89288700225171676599759774184146798321191748739703246395529001979988401303800066044674449834184095667747898974375431700503800142840899194492182057885675147681600217979466719692984863330298347742657472936559041930489702116255999412448996714923112824244267910808782794442895518685864174817501040060680962447941,93887528695360292524813814240190328732283663255426806128197957720674496260060703595933676082882204724501085633424942582304707395449222043328895852812543576418567716781870179606049899540449729036771290550645770978667075821043797569255787271932556218014920373462882329802597672026806552417735660553144344650642,775593521305134275967472254218401264703166138817,75084117510316201869105133948164969652170742276,599417004454208825884865529281453774324093134827,94203926294365722030261882520165826558476099177297861176153811285238289485953276649563642144753132730431066372867407177248194182778827143183520415437355921352580608448713381897280433120409711633310458263502217605470824497215111936036532237050330222480782799188409969149722885261258984444311562364318406725475829089368796269160936194172040318140462371217663,208672457767877303895327222020982963931779123819

由s = (h + xr) * invert(k, q) % q 逆推出x
(k
s-h)r^-1=x mod q
x 相当于rsa 加密中的e,x 有了结果就可以一步到位
脚本

from gmpy2 import * 
from Crypto.Util.number import * 
# print(p, q, g, y, h, r, s, c, k, sep=',') 
p = 
945150402202630978758725416680714706194357073582117165622199173317977
674880220530872675665867099447853297085715591266403396093751663859041
471899500356309104045346426221148046358563149284385315445532364582442
256986948466073332267044679320797125159716156438682092814604296298809
20550469170449935295454629293399 
q = 1001535514136994695529636128311212301250326767869 
 
g = 
892887002251716765997597741841467983211917487397032463955290019799884
013038000660446744498341840956677478989743754317005038001428408991944
921820578856751476816002179794667196929848633302983477426574729365590
419304897021162559994124489967149231128242442679108087827944428955186
85864174817501040060680962447941 
y = 
938875286953602925248138142401903287322836632554268061281979577206744
962600607035959336760828822047245010856334249425823047073954492220433
288958528125435764185677167818701796060498995404497290367712905506457
709786670758210437975692557872719325562180149203734628823298025976720
26806552417735660553144344650642 
h = 775593521305134275967472254218401264703166138817 
r = 75084117510316201869105133948164969652170742276 
s = 599417004454208825884865529281453774324093134827 
c = 
942039262943657220302618825201658265584760991772978611761538112852382
894859532766495636421447531327304310663728674071772481941827788271431
835204154373559213525806084487133818972804331204097116333104582635022
176054708244972151119360365322370503302224807827991884099691497228852
612589844443115623643184067254758290893687962691609361941720403181404
62371217663 
k = 208672457767877303895327222020982963931779123819 
t=invert(r,q) 
print(t) 
x=(k*s-h)*t%q 
print(x) 
phi=(p-1)*(q-1) 
print(gcd(x,phi)) 
d=invert(x,phi) 
m=powmod(c,d,p*q) 
print(m) 
print(long_to_bytes(m))

在这里插入图片描述
Misc

asoul_lover
在这里插入图片描述
其实当时就挺奔溃的,队伍里用了三种压缩软件在解压,一直以为是密码错了,没想到是压缩软件问题,winrar是能解压出来的
密码:向晚0612

在这里插入图片描述
在这里插入图片描述
其它WP在队友那边,就算了,比赛越打越想躺平。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值