easysignin
哪里easy了呜呜呜
查资料时看到了LCG
顿时悟了
这道题是LCG与RSA的结合
给出了序列但是不知道a,b,m
from gmpy2 import *
from sympy import *
from functools import reduce
def crack_unknown_modulus(states):
diffs = [s1 - s0 for s0, s1 in zip(states, states[1:])]
zeroes = [t2*t0 - t1*t1 for t0, t1, t2 in zip(diffs, diffs[1:], diffs[2:])]
modulus = abs(reduce(gcd, zeroes))
return crack_unknown_multiplier(states, modulus)
def crack_unknown_multiplier(states, modulus):
multiplier = (states[2] - states[1]) * invert(states[1] - states[0], modulus) % modulus # 注意这里求逆元
return crack_unknown_increment(states, modulus, multiplier)
def crack_unknown_increment(states, modulus, multiplier):
increment = (states[1] - states[0]*multiplier) % modulus
return modulus, multiplier, increment
print(crack_unknown_modulus([]))
将p,q,e解出
import gmpy2
from Crypto.Util.number import *
p=119353604751357907095099126361237172352729936256801629766911757588828980106816516793135610586187133613130121448311434612764330624196686107213281919965041
q=109343773067463534481524206665425623244725784341116470644975509165166303654465750918732105566312017979705738409277740758474078409480921281506350842310357
e=2506859405614764855349856966450571170247400435087621487381138068592792901463563718792349
c=1499341850116033218583322015832654376326982200720069022052964940686970117688218295301399005244875933100636608594036976589026918517646244220826168516373612155557984806411945784862108964553911520434368098212111129654894447128360717210621466898152738161667124194644244479881039031313468828783882375812512993823
n=2021*p*q
d=gmpy2.invert(e,(p-1)*(q-1)*1932)
m=pow(c,d,n)
print(long_to_bytes(m))