VCTF
应该是学了密码以后第二次参加新生赛,第一次密码爆零了,这次很高兴密码没有爆零,记录一下


狂飙

题目

import os

from flag import flag

from Crypto.Util.number import *

from Crypto.Cipher import AES

m = 88007513702424243702066490849596817304827839547007641526433597788800212065249

key = os.urandom(24)

key = bytes_to_long(key)

n=m % key

flag += (16 – len(flag) % 16) * b’\x00′

iv = os.urandom(16)

aes = AES.new(key,AES.MODE_CBC,iv)

enc_flag = aes.encrypt(flag)

print(n)

print(enc_flag)

print(iv)

#103560843006078708944833658339172896192389513625588

#b’\xfc\x87\xcb\x8e\x9d\x1a\x17\x86\xd9~\x16)\xbfU\x98D\xfe\x8f\xde\x9c\xb0\xd1\x9e\xe7\xa7\xefiY\x95C\x14\x13C@j1\x9d\x08\xd9\xe7W>F2\x96cm\xeb’

#b’UN\x1d\xe2r<\x1db\x00\xdb\x9a\x84\x1e\x82\xf0\x86′

 

简单的AES问题,只需先把key找出来就好,n=m%key,就是m-n//key是个整数就行了,那我之间把m-n的值分解就好,然后发现是四个数,那我一个一个组合去试不就好了吗。

 

Wp

from Crypto.Cipher import AES

n=103560843006078708944833658339172896192389513625588

enc_flag=b’\xfc\x87\xcb\x8e\x9d\x1a\x17\x86\xd9~\x16)\xbfU\x98D\xfe\x8f\xde\x9c\xb0\xd1\x9e\xe7\xa7\xefiY\x95C\x14\x13C@j1\x9d\x08\xd9\xe7W>F2\x96cm\xeb’

iv=b’UN\x1d\xe2r<\x1db\x00\xdb\x9a\x84\x1e\x82\xf0\x86′

key_int=1478350208450139900159081357030859898227287706593004549013

key_bytes = key_int.to_bytes((key_int.bit_length() + 7) // 8, ‘big’)

# 创建 AES 加密器

aes = AES.new(key_bytes, AES.MODE_CBC, iv)

# 解密数据

flag = aes.decrypt(enc_flag)

print(“解密后的 flag:”, flag)

 


 

RRSA

题目

from flag import flag

import random

from Crypto.Util.number import *

def genprime():

    o = getPrime(300)

    while True:

        r = random.randint(2**211,2**212)

        if isPrime(o*r+1):

            return o,o*r+1

o1,p = genprime()

o2,q = genprime()

n=p*q

g = random.randint(2,n)

order = o1*o2

a = pow(g, (p-1)*(q-1)//order, n)

assert pow(a,order,n)==1

m = bytes_to_long(flag)

e = 65537

c = pow(m,e,n)

print(f’n={n}’)

print(f’c={c}’)

print(f’a={a}’)

print(f’o={order}’)

n=44435425447782114838897637647733409614831121089064725526413247701631122523646623518523253532066782191116739274354991533158902831935676078270115998050827358178237970133151467497051097694866238654012042884894924846645692294679774577780414805605811029994570132760841672754334836945991390844881416693502552870759

c=41355409695119524180275572228024314281790321005050664347253778436753663918879919757571129194249071204946415158483084730406579433518426895158142068246063333111438863836668823874266012696265984976829088976346775293102571794377818611709336242495598331872036489022428750111592728015245733975923531682859930386731

a=39844923600973712577104437232871220768052114284995840460375902596405104689968610170336151307934820030811039502338683925817667771016288030594299464019664781911131177394369348831163266849069740191783143327911986419528382896919157135487360024877230254274474109707112110411601273850406237677432935818199348150470

o=1745108106200960949680880500144134006212310627077303652648249235148621661187609612344828833696608872318217367008018829485062303972702933973340909520462917612611270028511222134076453

 

写的时候没有反应过来是个格问题,比赛的时候比较笨在那里去硬算关系式,然后最后自己莫名其妙的得到了一个log的关系式,很抽象,学的还是太差了。。
看了官方wp后就明白了
关系式就是n=p*q,o=o1*o2
那么o1*r1*o2*r2=(p-1)*(q-1)=p*q-p-q+1=n-p-q+1
移项就可以得到n+1-o*r1*r2=p+q
那么就可以直接用LLL算法得到p+q,那么就可以去找p和q了

 

Wp

n=44435425447782114838897637647733409614831121089064725526413247701631122523646623518523253532066782191116739274354991533158902831935676078270115998050827358178237970133151467497051097694866238654012042884894924846645692294679774577780414805605811029994570132760841672754334836945991390844881416693502552870759

c=41355409695119524180275572228024314281790321005050664347253778436753663918879919757571129194249071204946415158483084730406579433518426895158142068246063333111438863836668823874266012696265984976829088976346775293102571794377818611709336242495598331872036489022428750111592728015245733975923531682859930386731

a=39844923600973712577104437232871220768052114284995840460375902596405104689968610170336151307934820030811039502338683925817667771016288030594299464019664781911131177394369348831163266849069740191783143327911986419528382896919157135487360024877230254274474109707112110411601273850406237677432935818199348150470

o=1745108106200960949680880500144134006212310627077303652648249235148621661187609612344828833696608872318217367008018829485062303972702933973340909520462917612611270028511222134076453

e = 65537

 

L=Matrix(ZZ,[[2^144,-o],[0,n+1]])

ZSM=L.LLL()[0]

j=ZSM[1]

x=j^2-4*n

import gmpy2

from Crypto.Util.number import *

 

y=int(gmpy2.iroot(x,2)[0])

p=(j-y)//2

q=n//p

d=inverse_mod(e,(p-1)*(q-1))

flag=int(pow(c,d,n))

print(j)

print(long_to_bytes(flag))


难得的实战机会,希望自己可以追上别人的步伐越来越强吧
心如草木,向阳而生
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇