首页 > 其他分享 >XYctf happy_to_solve wp

XYctf happy_to_solve wp

时间:2024-04-10 18:12:53浏览次数:151  
标签:phi 素数 flag solve nextprime wp import 512 happy

题目如下

点击查看代码
from Crypto.Util.number import *
import sympy
from secrets import flag

def get_happy_prime():
    p = getPrime(512)
    q = sympy.nextprime(p ^ ((1 << 512) - 1))
    return p, q

m = bytes_to_long(flag)
p, q = get_happy_prime()
n = p * q
e = 65537
print(n)
print(pow(m, e, n))
# 24852206647750545040640868093921252282805229864862413863025873203291042799096787789288461426555716785288286492530194901130042940279109598071958012303179823645151637759103558737126271435636657767272703908384802528366090871653024192321398785017073393201385586868836278447340624427705360349350604325533927890879
# 14767985399473111932544176852718061186100743117407141435994374261886396781040934632110608219482140465671269958180849886097491653105939368395716596413352563005027867546585191103214650790884720729601171517615620202183534021987618146862260558624458833387692782722514796407503120297235224234298891794056695442287

题目给了n,c,e的值,要得到flag就得先解m的值。又因为m = pow(c, d, n), 且给了e值,所以利用p,q的生成规则求phi_n的值成为了问题的关键!
观察p, q生成的规则,发现p是随机取的512位的素数;
sympy.nextprime() 函数接受一个整数作为参数,并返回大于该整数的下一个素数;
1 << 512 是一个位运算,表示将1左移512位,即得到一个只有第513位为1的数,其他位都为0的数;
(1 << 512) - 1 是将上述结果减去1,得到一个二进制表示全为1的512位数;
所以q的结果就是p与512位的1进行异或的结果,再进行nextprime。
因为phi_n = n - (p + q) + 1 ,且n位数与全1按位异或等于取反,原码 + 反码 = 2 ** n - 1
我们先不计q在nextprime函数后的差值,所以p + q = 2 ** 512 - 1
又因为素数性质(除2之外都是奇数),因此,p + q = 2 ** 512 - 1 + t
所以,爆破!这里的t从1开始,每次爆完t + 2,满足奇数条件,直到有符合的怕p + q的值便可得到flag

代码呈上

点击查看代码
import gmpy2
from Crypto.Util.number import *


n =  24852206647750545040640868093921252282805229864862413863025873203291042799096787789288461426555716785288286492530194901130042940279109598071958012303179823645151637759103558737126271435636657767272703908384802528366090871653024192321398785017073393201385586868836278447340624427705360349350604325533927890879
c =  14767985399473111932544176852718061186100743117407141435994374261886396781040934632110608219482140465671269958180849886097491653105939368395716596413352563005027867546585191103214650790884720729601171517615620202183534021987618146862260558624458833387692782722514796407503120297235224234298891794056695442287
e = 65537
t = 1
# 因为q是p的取反后取比其值大的最近的一个素数,所以p + q = 2**512 - 1 + t
for i in range(400):
    phi = n - (2**512 - 1 + t) + 1
    d = gmpy2.invert(e, phi)
    m = pow(c, d, n)
    print(long_to_bytes(m))
    t += 2

这里遍历400次后,大概在一百多次就爆出来flag! 完上!

标签:phi,素数,flag,solve,nextprime,wp,import,512,happy
From: https://www.cnblogs.com/futihuanhuan/p/18127114

相关文章

  • 吐槽 WPS 流氓行为: WPS 未经用户允许, 就建立了 WPS本地云盘 , 然后 云文档的文件 莫
    WPS云文档简介具体使用参考下面链接WPS系列课-WPS云文档新手教程WPS具有免费的1GB云空间,对于文档类来说,免费空间够用了,毕竟不跟百度云之类的通用云存储一样,WPS云主要是以文档为主.我可以在WPS云创建一个云文档,我可以在电脑编辑完毕后,用手机WPS继续编辑.这很方......
  • От 6LoWPAN до 6Lo
    ВархитектуреIPIP(PHY,MAC)поданномупротоколудолженбытьопределенизадокументировандляпередачиданных.Модели,инкапсулирующиеIPвнижни......
  • WPF的实时更新
    publicpartialclassApp:Application{#regionDoEventprivatestaticDispatcherOperationCallbackexitFrameCallback=newDispatcherOperationCallback(ExitFrame);privatestaticObjectExitFrame(Objectstate){......
  • C#WPF仿苹果的漂亮的工具栏
    本文讲解C#WPF构建仿苹果的漂亮的工具栏。自定义工具栏样式代码如下<Window.Resources><Stylex:Key="ToolBarStyle"TargetType="ToolBar"><SetterProperty="Background"Value="LightBlue"/><SetterProperty=&q......
  • WPF combobox selectionchanged and triggered the listbox scroll/locate to the sel
    //xaml<Windowx:Class="WpfApp48.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic......
  • 【WPF应用41】WPF中的Expander控件详解
    WindowsPresentationFoundation(WPF)中的Expander控件是一个用于显示详细信息的交互式UI元素。它允许用户通过点击标题来展开或折叠内容区域。Expander控件通常用于在界面上组织内容,提供一种可见/隐藏的功能,以帮助用户专注于当前感兴趣的信息。一、Expander控件简介Expand......
  • WPF —— 平移变换动画实例
    创建动画面临第一个问题选择正确的属性,选择属性的准则有以下几个方式进行选择 1如果希望动画显示和隐藏元素的时候,不要使用visibility,应使用opacity进行动画 2如果改变元素的位置的动画,尽量使用Canvas,使用Canvas.left以及canvas.top属性进行调整 但是也可以使用thickne......
  • WPS二次开发系列:Gradle版本、AGP插件与Java版本的对应关系
    背景最近有体验SDK的同学反馈接入SDK出现报错,最终定位到原因为接入的宿主app项目的gradle版本过低导致,SDK兼容支持了android11的特性,需要对应的gradle插件为支持android11的版本。现象解决方案将gradle版本升级至支持android11的插件版本即可,对此google官方的引文如下......
  • Android开发基础:AdapterView类视图控件的使用,Fragment,ViewPager2视图控件的使用
    目录一,Adapter1.什么是Adapter? 2.Android中的常用Adapter二,AdapterView1.AdapterView简介 2.AdapterView的子视图对象 三,ListView滑动列表形式四,GridView网格形式显示 五,Fragment和ViewPager2视图控件的使用1.什么是Fragment?2.ViewPager23.TabLayout+ViewPage......
  • WPF系列文章合集(低调奢华版)
    自上一个系列文章写完之后,最近的两三个月时间,一直在写WPF相关技术文章,断断续续地写了近二十几篇文章,为了方便大家阅读,现将本系列文章分类整理,汇总如下。 浅谈WPF系列文章本系列共17篇文章,目录如下: 浅谈WPF之UI布局浅谈WPF之样式与资源浅谈WPF之各种Template......