[Zer0pts2020]ROR
通过代码可知n为2 的倍数
对n取余二进制最后一位不变
所以可以得到c的最后一位即为m的最后一位
import gmpy2
flag=''
f=open('chall.txt','r').readlines()
li=[]
for i in f:
li.append(int(i.strip('\n')))
#print(li)
for i in li:
flag+=bin(i)[-1]
from Crypto.Util import number
print(number.long_to_bytes(eval('0b'+flag[::-1])))
巅峰极客
CRTrsa
我们可以知道
d = dp %p-1
e*dp=1 mod p-1
e*dp-1=k(p-1)
a^(e*dp-1) =1 mod p = 1 mod n
a^(e*dp-1)-1 = kp
gcd(n,_)=p
而dp在(1,1<<20)范围内
import gmpy2
from Crypto.Util.number import *
e = 2953544268002866703872076551930953722572317122777861299293407053391808199220655289235983088986372630141821049118015752017412642148934113723174855236142887
n = 6006128121276172470274143101473619963750725942458450119252491144009018469845917986523007748831362674341219814935241703026024431390531323127620970750816983
c = 4082777468662493175049853412968913980472986215497247773911290709560282223053863513029985115855416847643274608394467813391117463817805000754191093158289399
for i in range(1,1<<20):
x=pow(2,i*e-1,n)-1
if(gmpy2.gcd(x,n)!=1):
p=gmpy2.gcd(x,n)
break
q=n//p
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)
m=pow(c,d,n)
print(long_to_bytes(m))
跑得有……慢
DASCTF 签到
AES题
借个图
首先使明文0与iv相同
异或得到0
在进行加密 得到密文块0
在输入明文块1
使明文块1与密文0相同异或得到0
在进行相同加密 得到密文1
即密文1=密文0 =明文1