def __init__(self, pBit, qBit, e): self.e = e while True: self.p = self.genP_Q(pBit) self.q = self.genP_Q(qBit) self.phi = (self.p - 1) * (self.q - 1) self.d = RSA.inverse(e, self.phi) if (self.d != 1): break self.n = self.p * self.q
possible_ps = [] for p in possible_ps_new: ok = False for q in possible_qs_new: if not pq_cant_fit(p, q, fixed_len): ok = True break if ok: possible_ps.append(p) possible_qs = [] for q in possible_qs_new: ok = False for p in possible_ps: if not pq_cant_fit(p, q, fixed_len): ok = True break if ok: possible_qs.append(q) print("Finished!") print("p = %X" % p) print("p_mask = %X" % p_mask) print("q = %X" % q) print("q_mask = %X" % q_mask) print("n = %X" % (p*q)) d = RSA.inverse(e, (p-1)*(q-1)) rsa_priv = RSA.construct((p*q, e, d, p, q)) a = rsa_priv.exportKey().decode() open("recovered.key", 'wt').write(a)