BUUCTF [NPUCTF2020]认清形势,建立信心

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

p = getPrime(25)
e = '# Hidden'
q = getPrime(25)
n = p * q
m = bytes_to_long(flag.strip(b"npuctf{").strip(b"}"))

c = pow(m, e, n)
print(c)
print(pow(2, e, n)) # c1
print(pow(4, e, n)) # c2
print(pow(8, e, n)) # c3

'''
169169912654178

128509160179202
518818742414340
358553002064450
'''

题目告诉了我们三个同余式 我们要想办法求解n和e
这里求n的方法特别经典:构造两个含n的乘积式 通过gcd来求解
推导:

c1^2 = c2 + k2 x n
c1^3 = c3 + k3 x n
=>
k2 x n = c1^2 - c2
k3 x n = c1^3 - c3

这样我们求解gcd然后factor.db分解一下就可以得到n 了
这里gcd=1054494004042394 分解结果image
所以去掉2 即为p,q
然后求解e的话直接用sympy自带的discrete_log函数解决即可
exp:

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

c1 = 128509160179202
c2 = 518818742414340
c3 = 358553002064450

print(gcd(c1*c1-c2,c1*c1*c1-c3))

p = 18195301
q = 28977097
n = p*q
e = discrete_log(n,c1,2)
print(e)
c = 169169912654178
phi = (p-1)*(q-1)
d = modinv(e,phi)
m = pow(c,d,n)
print(long_to_bytes(m))
posted @   N0zoM1z0  阅读(73)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
  1. 1 三日月の舞 Kitauji
  2. 2 Cagayake!GIRLS K-ON
三日月の舞 - Kitauji
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.
点击右上角即可分享
微信分享提示