首页 > 其他分享 >buuctf childRSA wp

buuctf childRSA wp

时间:2024-03-27 21:44:20浏览次数:16  
标签:buuctf gmpy2 base childRSA wp import primes sieve isPrime

题目如下

点击查看代码
from random import choice
from Crypto.Util.number import isPrime, sieve_base as primes
from flag import flag


def getPrime(bits):
    while True:
        n = 2
        while n.bit_length() < bits:
            n *= choice(primes)
        if isPrime(n + 1):
            return n + 1


e = 0x10001
m = int.from_bytes(flag.encode(), 'big')
p, q = [getPrime(2048) for _ in range(2)]
n = p * q
c = pow(m, e, n)

# n = 32849718197337581823002243717057659218502519004386996660885100592872201948834155543125924395614928962750579667346279456710633774501407292473006312537723894221717638059058796679686953564471994009285384798450493756900459225040360430847240975678450171551048783818642467506711424027848778367427338647282428667393241157151675410661015044633282064056800913282016363415202171926089293431012379261585078566301060173689328363696699811123592090204578098276704877408688525618732848817623879899628629300385790344366046641825507767709276622692835393219811283244303899850483748651722336996164724553364097066493953127153066970594638491950199605713033004684970381605908909693802373826516622872100822213645899846325022476318425889580091613323747640467299866189070780620292627043349618839126919699862580579994887507733838561768581933029077488033326056066378869170169389819542928899483936705521710423905128732013121538495096959944889076705471928490092476616709838980562233255542325528398956185421193665359897664110835645928646616337700617883946369110702443135980068553511927115723157704586595844927607636003501038871748639417378062348085980873502535098755568810971926925447913858894180171498580131088992227637341857123607600275137768132347158657063692388249513
# c = 26308018356739853895382240109968894175166731283702927002165268998773708335216338997058314157717147131083296551313334042509806229853341488461087009955203854253313827608275460592785607739091992591431080342664081962030557042784864074533380701014585315663218783130162376176094773010478159362434331787279303302718098735574605469803801873109982473258207444342330633191849040553550708886593340770753064322410889048135425025715982196600650740987076486540674090923181664281515197679745907830107684777248532278645343716263686014941081417914622724906314960249945105011301731247324601620886782967217339340393853616450077105125391982689986178342417223392217085276465471102737594719932347242482670320801063191869471318313514407997326350065187904154229557706351355052446027159972546737213451422978211055778164578782156428466626894026103053360431281644645515155471301826844754338802352846095293421718249819728205538534652212984831283642472071669494851823123552827380737798609829706225744376667082534026874483482483127491533474306552210039386256062116345785870668331513725792053302188276682550672663353937781055621860101624242216671635824311412793495965628876036344731733142759495348248970313655381407241457118743532311394697763283681852908564387282605279108

刚看到题没什么思路,只是给了p,q的生成规则,以及n的值。直接用yafu分解的话可以做,但是很明显不是作者意料的的计算方式。
我们注意到有from Crypto.Util.number import isPrime, sieve_base as primes其中ctrl单击sieve_base这个库我们可以得到
The first 10000 primes used for checking primality.
This should be enough to eliminate most of the odd
numbers before needing to do a Rabin-Miller test at all.
大概意思是生成10000个素数。
又因为根据作者提供的get primes的函数,我们可知 p - 1 = P1P2P3....Pn,任取n个素数相乘直到满足long_bits大于2048,由此,我们不难联想到平滑算法以及费马小定理

相关文章http://blog.csdn.net/m0_62506844/article/details/125774485

已知费马小定理a^p-1 ≡ 1 (modp)
所以可得a ^k(p−1) ≡ 1(modp)
n=p∗q
p - 1 = P1P2P3....Pn
所以p−1是B−smooth的,B为sieve_base中一个素数
所以(p−1)∣B!(这里的B!是一个指代性的含义,指sieve_base中的所有素数的乘积)
B! = k*(p-1)
所以a^(B!)= a ^ k(p−1) ≡ 1(modp)
gcd(2^B!−1,n)=p (Pollardsp−1光滑算法)
至此,我们求解了p,q的值,便可以算出来m啦
代码如下:

点击查看代码
from Crypto.Util.number import isPrime, sieve_base as primes,long_to_bytes
import gmpy2
 
e = 65537
n = 32849718197337581823002243717057659218502519004386996660885100592872201948834155543125924395614928962750579667346279456710633774501407292473006312537723894221717638059058796679686953564471994009285384798450493756900459225040360430847240975678450171551048783818642467506711424027848778367427338647282428667393241157151675410661015044633282064056800913282016363415202171926089293431012379261585078566301060173689328363696699811123592090204578098276704877408688525618732848817623879899628629300385790344366046641825507767709276622692835393219811283244303899850483748651722336996164724553364097066493953127153066970594638491950199605713033004684970381605908909693802373826516622872100822213645899846325022476318425889580091613323747640467299866189070780620292627043349618839126919699862580579994887507733838561768581933029077488033326056066378869170169389819542928899483936705521710423905128732013121538495096959944889076705471928490092476616709838980562233255542325528398956185421193665359897664110835645928646616337700617883946369110702443135980068553511927115723157704586595844927607636003501038871748639417378062348085980873502535098755568810971926925447913858894180171498580131088992227637341857123607600275137768132347158657063692388249513
c = 26308018356739853895382240109968894175166731283702927002165268998773708335216338997058314157717147131083296551313334042509806229853341488461087009955203854253313827608275460592785607739091992591431080342664081962030557042784864074533380701014585315663218783130162376176094773010478159362434331787279303302718098735574605469803801873109982473258207444342330633191849040553550708886593340770753064322410889048135425025715982196600650740987076486540674090923181664281515197679745907830107684777248532278645343716263686014941081417914622724906314960249945105011301731247324601620886782967217339340393853616450077105125391982689986178342417223392217085276465471102737594719932347242482670320801063191869471318313514407997326350065187904154229557706351355052446027159972546737213451422978211055778164578782156428466626894026103053360431281644645515155471301826844754338802352846095293421718249819728205538534652212984831283642472071669494851823123552827380737798609829706225744376667082534026874483482483127491533474306552210039386256062116345785870668331513725792053302188276682550672663353937781055621860101624242216671635824311412793495965628876036344731733142759495348248970313655381407241457118743532311394697763283681852908564387282605279108
 
num=1
for i in primes:
    num*=i
p=gmpy2.gcd(gmpy2.powmod(2,num,n)-1,n)
q=n//p
d=gmpy2.invert(e,(p-1)*(q-1))
m=gmpy2.powmod(c,d,n)
 
print(long_to_bytes(m))
运行得到b'NCTF{Th3r3_ar3_1ns3cure_RSA_m0duli_7hat_at_f1rst_gl4nce_appe4r_t0_be_s3cur3}'

标签:buuctf,gmpy2,base,childRSA,wp,import,primes,sieve,isPrime
From: https://www.cnblogs.com/futihuanhuan/p/18100325

相关文章

  • WPF解决当ScrollViewer中嵌套ItemsControl时,不能使用鼠标来滚动翻页
    1.在DataGrid中添加PreviewMouseWheel事件,并将事件的Handled属性设置为false,以便将滚动事件传递给ScrollViewer。示例代码如下:<DataGridPreviewMouseWheel="DataGrid_PreviewMouseWheel"><!--DataGrid的其他设置--></DataGrid>privatevoidDataGrid_PreviewMouseWh......
  • WPF StringFormat在Label控件无效
    在WPF程序设计时,若使用Label控件绑定数据后StringFormat进行格式化显示时发现设定的StringFormat无效,但TextBlock控件中使用StringFormat显示正常,导致Label控件StringFormat失败的根本原因在于Label控件的Content属性是一个object对象,Binding.StringFormat仅作用于string类型属性......
  • buuctf之pwn1_sctf_2016
    一、查看属性首先还是必要的查看属性环节:可以知道该文件是一个x86架构下的32位小段ELF程序我们可以先执行一下看看:二、静态分析扔到IDA中看一下,主函数没什么用,这里的vuln函数是必进的,我们进去看看vuln函数这个函数整体分析下来,我也看不太明白是干啥,看到了fgets函数,但......
  • 【wpf】 枚举转bool转换器
    ///<summary>///枚举转bool///</summary>publicclassEnum2BooleanConverter:IValueConverter{publicobjectConvert(objectvalue,TypetargetType,objectparameter,CultureInfoculture){returnva......
  • WPS二次开发系列:打印流程大突破!Android 如何一步获取WPS内文档
    前言当前市面上几乎所有的打印软件都支持WPS/微信/QQ/钉钉的文档进行打印,但是其实现方案均为需要引导用户进入对应的app选择分享或发送到打印app进行打印,其根本原因在于打印app无法直接获取到WPS/微信/QQ/钉钉等应用内的文档列表,且由于现有的android11之后的文件架构,更是无法......
  • Android原生ViewPager控件实现卡片翻动效果
    本文实例为大家分享了Android控件ViewPager实现卡片翻动效果的具体代码,供大家参考,具体内容如下先放一张效果图:想要实现这样的效果其实并不是太难,需要对ViewPager的一些细节属性更深入的了解和认识,下面介绍下一个小demo的实现过程:**第一步、**创建卡片viewpager适配器的i......
  • WPF自定义Panel:让拖拽变得更简单
       在WPF应用程序中,拖放操作是实现用户交互的重要组成部分。通过拖放操作,用户可以轻松地将数据从一个位置移动到另一个位置,或者将控件从一个容器移动到另一个容器。然而,WPF中默认的拖放操作可能并不是那么好用。为了解决这个问题,我们可以自定义一个Panel来实现更简单的拖......
  • WPS二次开发系列:如何对打开文档路径FileUri授权
    1.什么是FileProvider若要安全地将应用中的文件提供给其他应用,您需要配置应用,以内容URI的形式提供文件的安全句柄。AndroidFileProvider组件会根据您在XML中指定的内容生成文件的内容URI。这部分知识是AndroidFileProvider通用知识,详细请参考FileProvider2......
  • WPF中自定义按钮实现最大化最小化动画过度效果
    需要使用WindowsAPI[DllImport("user32.dll",EntryPoint="SetWindowLong")]privatestaticexternintSetWindowLong32(HandleRefhWnd,intnIndex,intdwNewLong);[DllImport("user32.dll",EntryPoint="SetWindowLongPtr"......
  • WPF —— Menu数据绑定实例
    {Binding}因为我们操作这个集合对象,而不是集中某个对象,所以直接写{Binding}就行      如果绑定是list集合的某个对象属性时候,需要{bindingvpath=属性名}<Menux:Name="m1"ItemsSource="{Binding}"></Menu>树形数据模板:分层数据模板,主要是用于MenuIt......