想要多人运动队-练习题 Write up | Crypto

07-Encrypted-png

题目给出了加密脚本,可以看出脚本对图片的每一个色块的RGB值进行了运算,替换原图的色块
其中x、y为两个加密的参数

题目中说到:固定x、y的其中一个值,爆破另一个也可以恢复图片中的flag
那我们先使x=0,爆破y

from PIL import Image
p2=Image.open('encrypted.png')

p1=Image.new("RGB",(426,49),(255,255,255))

x=0

for y in range(256):
    for i in range(426):
        for j in range(49):
            r=p2.getpixel((i,j))[0]
            g=p2.getpixel((i,j))[1]
            b=p2.getpixel((i,j))[2]
            r=(r-(i*x+j*y))%256
            g=(g-(i*x+j*y))%256
            b=(b-(i*x+j*y))%256
            x+=1
            y+=1
            #print(p1.getpixel((i,j)))
            p1.putpixel((i,j),(r,g,b))
    p1.save(".\\de\\"+str(y-426*49)+".png")
            

p1.save("decrypted.png")

在输出的图片中,54.png恢复了flag
想要多人运动队-练习题 Write up | Crypto_第1张图片

08-初中生的RSA

题目给出了n、c、(p+r)/2、(q-r)/2
那么我们可以从中算出phi

  • phi = (p-1)(q-1) = pq-(p+q)+1 = n-2((p+r)/2+(q-r)/2)+1

写脚本解密:

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

n=10840419055482829242182759126330533373469680145517647320400136473263462878945307057315415192896409733622282551220525660819395806268298952965274144829739559711650371342189422489074044761362112603292279139473536527348788001099462611403288189693898892074123815674763650258798154051990621689172445089648035487605009745159612943306447185216183040386858838645287700811721083325576165599166163476463411983770040492580346153032866405225597472277222270538742699466177940046965729867837328840831902751046963135622216207216508838904652625812003668258151459042630259985002585545647481086849166811619688251164376827228313008258489
c=4447033462880758856327444742483291113144209834403402840480593183394233891392471136996296985845727319644142945289256357994749436988426399281622193875365962058707932631182455384455810856866117093876426790171764173725189089314481824738002090926751186613487692621287996431693182413862145245786094333890994789116240762910051566991052305278438517004492845761460362946067325168020274350128313551004695972893711457502626083868404563603302017783200795541486786883193118240214667786747775865972683470490263314994927912157529369167710504458075403088812819692156505860350950781811381667812176782579952698751891827829245092793610
pr=129923542758674785338546154454504105426625667885794770668986569858792882388398067257995249292121378097707208626582635008385227474253234970851736712621240976584185826680785552834602789874323028476898194437850758404176627082642000200668008042441915407487410859132747440310752495362798983268996249624868410651152
qr=-25572136998136606277704033156623862294935626844815418051326685278033598612522097632844797604133251569718633807520238148568575112987367877941165234404742854587977493920100219196190734277732671355759488310148821339045141855145435950829717096140533810610249307792054592806042205173505208027528758429588055818277
e=65537

phi=n-(pr+qr)*2+1

d=invert(e,phi)
m=pow(c,d,n)
flag=long_to_bytes(m)
print(flag)

09高中生的RSA

与上题同理

  • phi=(p-1)(q-1)(r-1)=pqr-(pq+pr+qr)+(p+q+r)-1
  • (p+q+r)2=p2+q2+r2+2(pq+pr+qr)

由此求出phi

脚本不再给出

你可能感兴趣的:(rsa,密码学,CTF,安全)