当前位置: 首页 > news >正文

2025 N1CTF crypto 复现

  • 近一个月都没有学习了,一些比赛也没有打,很惭愧自己还是处在刚放假时的水平啊,马上开学了,抓紧做一些训练来康复。

CheckIn

import os
from Crypto.Util.number import *
from secret import FLAG

p, q = getPrime(512), getPrime(512)
n = p * q
phi = (p - 1) * (q - 1)
e = 65537

r = bytes_to_long(b'n1junior2025')
gift = ((2025 * p + r * r) * p % phi) >> 750

msg = bytes_to_long(FLAG)
ct = pow(msg, e, n)

print(f"n = {n}")
print(f"e = {e}")
print(f"ct = {ct}")
print(f"gift = {gift}")

'''
n = 127060392619341060272126983366487069092712215979664340339428955285201267724168574813227106020122399594060458777939446978632526348867806863618885370221957087197582864380885199290793062293120324984868138488667017882272415668310242448870352699380394381756621677031459335310964085476227148301120850021800822495119
e = 65537
ct = 18305235107479382231970252522433686185039231184629854177334609960907102735540326234277108553640185845164498239822263821349544015918443334769445559622730315115384134147808359107914969010678607157349844717217781801237935737980608575612421610972048739840839726108493286994232100086338529591086935374295281642738
gift = 8312456126096895497368692810699639462746223116345115761188530231045483000989605820
'''

经典RSA,唯一的额外信息在gift,测一下发现r是90bit,gift在移位是273+750位,也就是1024位左右,也就是说等式两边可以画一个约等于符号,通过在实数域上的近似计算,可以恢复p的高位在这里插入图片描述

from Crypto.Util.number import *
from libnum import *
n = 127060392619341060272126983366487069092712215979664340339428955285201267724168574813227106020122399594060458777939446978632526348867806863618885370221957087197582864380885199290793062293120324984868138488667017882272415668310242448870352699380394381756621677031459335310964085476227148301120850021800822495119
e = 65537
ct = 18305235107479382231970252522433686185039231184629854177334609960907102735540326234277108553640185845164498239822263821349544015918443334769445559622730315115384134147808359107914969010678607157349844717217781801237935737980608575612421610972048739840839726108493286994232100086338529591086935374295281642738
gift = 8312456126096895497368692810699639462746223116345115761188530231045483000989605820
r = bytes_to_long(b'n1junior2025')
g=gift<<750
PR.<x> = PolynomialRing(RealField(1000))
for i in trange(2300,2400):
    f=g*x-2025*x^3-x^2*r^2-i*(x-1)*(n-x)
    root=f.roots()
    ph=int(root[-1][0])>>226<<226#总共就三组,都试试就可以用最后一组解出
    PR.<y> = PolynomialRing(Zmod(n))
    f=ph+y
    res=f.small_roots(X=2**226,beta=0.4)
    if res and res[0]!=0:
        p=int(res[0])+ph
        print(res,p)
        break
q=n//p
print(long_to_bytes(pow(ct,invmod(e,(p-1)*(q-1)),n)))

相关文章:

  • 微信小程序image组件mode属性详解
  • HTML之JavaScript对象
  • 【JVM系列】谈一谈JVM调优
  • ubuntu系统下KVM设置桥接网络(失败)
  • UE5.3 C++ 通过Spline样条实现三维连线,自己UV贴图。
  • MongoDB:listDatabases failed : not master and slaveOk=false
  • WPF-APP全局生命周期事件
  • RocketMq中RouteInfoManger组件的源码分析
  • 【java】作业1
  • Ai知识点总结
  • 每日一题——不同路径的数目与矩阵最小路径和
  • 性格测评小程序07用户登录
  • 【第14章:神经符号集成与可解释AI—14.2 可解释AI技术:LIME、SHAP等的实现与应用案例】
  • 2025年2月16日笔记
  • NSSCTF Pwn [HUBUCTF 2022 新生赛]singout WP
  • 二〇二四年终总结
  • 搭建Deepseek推理服务
  • dify新版,chatflow对deepseek的适配情况
  • bps是什么意思
  • 网络安全:从攻击到防御的全景解析
  • 盖茨:20年内将捐出几乎全部财富,盖茨基金会2045年关闭
  • 夜读丨古代有没有近视眼?
  • 央行:上市公司回购增持股票自有资金比例要求从30%下调至10%
  • 安赛乐米塔尔深化在华战略布局,VAMA总经理:做中国汽车板竞争力前三
  • 践行自由贸易主义理念,加快区域合作进程
  • 同路人才是真朋友——驻南苏丹使馆援助东赤道州人道主义物资交接仪式侧记