21届acm线下密码题目real_easy_rsa

news/2025/10/14 17:59:14/文章来源:https://www.cnblogs.com/miaosamakawayii/p/19141372

参加了湖南省线下的acm程序设计大赛中的网络攻防赛事,拼尽全力拿的二等奖。作为二进制手觉得题目难度还是在的,所以决定复现一下。

crypto:Real_eazy_RSA

根据题目是一个rsa的题目,题目给了加密文件的附件,附件代码如下:

#! /usr/bin/env python
# -*- coding: utf-8 -*-from flag import flag
from Crypto.Util.number import *import gmpy2
import libnumdef destory(x, num):while True:dt = getRandomNBitInteger(num)r = x ^ dtif isPrime(r):return rm = libnum.s2n(flag)p0 = getPrime(2048)
q0 = getPrime(2048)
n0 = p0 * q0
e = 65537d0 = gmpy2.invert(e, (p0 - 1) * (q0 - 1))
print("n0 =", n0)
print("d0 =", d0)p = destory(p0, 800)
q = destory(q0, 800)n = p * q
print("n =", n)
c = pow(m, e, n)
print("c =", c)'''
n0 = 698664348910354605992334201517949906612437422182080146022849552823741708822757357522068253615746226600393943777662460271300764091194578786817396265156137942711366685689097208244452989676647487269940961964884924452504118584572080962723501407124277683476829441598726505268208802508656087327383827769016816968846323859798642849180869203321061866736282461832447406533703512229762500958679041285778430782443804351191811074126821062494661316953343584733719937494423828982141874290981860958303848841443214129004130787697843398085768415326086552369903184446484553811667610590088970324939644328344136432155656942214580814739404689343808663928282320174221851232619199634576066100199107594544289589595960304261269738953967136101822734650734397315247930616492608759419803567886825109367935570337465683594659504814218986697928013193195090372672668693673770705095692354195587811392958753875082906033302521659106164061879083417457873566844005100342927907700877283490656192819602530122532449963022351046497148694941549535531207979316555994247676397008027521438208149566406334506713450890994646521326072171492216646239221350820586134564857176989744444324822415179134610987354954684815279537563578417618985607970650578812883186576970547678327776928001
d0 = 692555819805793317113783039617500003557843427295064690270052006494675624028588567893917054913916381049910617873446512184945646557217520123087802782696848273651543790059149961645980805062082905274950709569964817311327609743017542268678296922538742625225273476723372578669208487513501290219817248076451599822453462673420495812353113308887337887157725465774800697591521048697595115923518397822440910895382445120631472521164758891983203042473061211813805667323614898850967617093235052188767432688946960689024892083738997795340706155808839080033544264680736416891544847252308464961615256330722316846644797558539878664704323194300871359077964780829536440414713005306355429443508252501736526361465491523417471289412353702307854173840504690343253243770921937429255163070136575411802979069056366720363994306513840048097318383847851118184935368616797862581861434578052208471864506525568444632207717079097626628266771743917694713403814281157564889332120083875392300707813335328094702070801651993908595562505929237530528527122417181328131161783445748216579395304470504021556837349052678371147813533040498470352267972960903211655930881764695439876356939005390594564763938665139142743572759494510593948628850161355676265013573395181115731806010561
n = 698664348910354605992334201517949906612437422182080146022849552823741708822757357522068253615746226600393943777662460271300764091194578786817396265156137942711366685689097208244452989676647487269940961964884924452504118584572080962723501407124277683476829441598726505268208802508656087327383827769016816968846323859798642849180869203321061866736282461832447406533703512229762534718228640067586431737506487896332115576147394544398234041012904714094353905418347483184942698635711551011802421075148960207373386724462718808279274327912911574584305111124940624103608874202956251117222718677568295257185135186786929963739742282929990897652065207753386268886442140214575551708441130682172734226109045575037238370046592416318838386052323167429866133596452311623190782432590327878356009615660686535726451011523553276842803390256038806825246369935694605741040553788296168910629212610858098463463495162871310794597321246516194730214409634830475214466650723284060608258946367391607896483337789406225301848670532630693209126093439641618009725589130603354848594114773629746956978614323856143192805454242046838861179695951985888544785958461175721372286209853205888455644017834031469670186411936879612338415876347940683809413543426211858975805873523
c = 111550078518246633066631726252566550310559790360290371527037539337426614410391049540226071099565395038663245989775049521515501173415179258009025310349457928619270539097879677081881762426682124527978529964448810246961950766648646458040959742583701301148517837500257865431705497432163681163017905778907120646175242173811680114453710449363960505400023858746288641623601728773244973081773772467143587564108399804325860425125007456240419748367236134705306272375678946945012555805515065148886922490582141784485022664040344635568073155371580696805423152037004511555834712607362012577417743917468051307967089477572383630317065382448635164293534089318333519868237954904029922062357326514587624258367212086772577605688733851193621036316410243338573044700827756269425564473376750855571701374518535064137226567853807948556383203481108410159397097945753559303202148649177210375763144711913480027673227946442984036490253309252106888769630620698049189574421895508501898900144059137691451183780895753516561980671157558568540152370075258851300828054960582864601084029805892835636508573083365848436608145075666428034812041785240108227976311208241928681443555461076605848780485520346538827617500981804287595269225955512538644647985580052553505501670729
'''

这里给出的n0和d0,而这是通过getPrime函数得到的p0和q0得到的,这是我没有遇到过的一种类型,所以比赛就是因为一部分导致我后面的都没办法实现了。

比赛时候的思路我想的是如果p0和q0能够求出来的话,那么通过sagemath进行求小根的方法可以恢复出p和q,我觉得我第二部的思路应该是没问题的,本来函数名字就是摧毁,并且还是异或800位的随机值,所以求小根来进行低位数恢复是可行的。

那么现在的问题就回到了如何分解出p0和q0上去了,题目中给出了n0和d0,然后e也是知道的,所以应该从这三个参数之间的关系式,尝试求出p0和q0,又或者建立出合适的数学关系式子,从而用合适的算法让电脑跑出p0和q0。
(比赛中没能做出,回来让ai给出分解出p0和q0的思路了)

n0 = p0 * q0#1
d0 * e === 1 mod (p0-1) * (q0-1)#2
phi = (p0-1) * (q0-1)#3
#三个基础的关系式子d0*e - 1 = k * phi #从2式得到,并且phi是奇数
#d0*e偶数,减去1变为奇数;phi为奇数所以k一定是偶数,这样两个相乘才是奇数

现在得到最好的数学关系式子和对数的讨论就这样了,d0,e已经知道,而k是偶数,偶数可以写成 2^i 的格式,奇数写作t,ai给出的思路,跟后面的求n0非平凡因子有关,并且写为2^i,后面判断t是否为奇数也是用t%2==0来判断。

这一段的代码写为:

k = e × d0 - 1
s = 0
while k % 2 == 0:s += 1k //= 2
t = k

这里最关键的就是求出这个t,用于后面的“随机搜索因子”的方法。

这个方法是ai给的,首先随机选取一个基数g(2<=g<=n0-1),然后依次计算序列x_0 = g^t mod n0, x_1 = x_0^2 mod n0, ..., x_s = x_{s-1}^2 mod n0,如果存在某个i使得x_i ≠ ±1 mod n0但x_{i+1} ≡ 1 mod n0,则gcd(x_i - 1, n0)是n0的非平凡因子,但这里的题目我们找到就是x_i ≠ 1 mod n0但x_{i+1} ≡ 1 mod n0的情况就可以了,然后rsa中的n的性质我们是知道的,n0除了1*n0之外的因子,就只有生成出n0的p0和q0。

这里我用的是sagemath环境来编写的代码的,所以我第一部分写的代码如下:

import gmpy2
from Crypto.Util.number import long_to_bytes
from sage.all import *n0 = 698664348910354605992334201517949906612437422182080146022849552823741708822757357522068253615746226600393943777662460271300764091194578786817396265156137942711366685689097208244452989676647487269940961964884924452504118584572080962723501407124277683476829441598726505268208802508656087327383827769016816968846323859798642849180869203321061866736282461832447406533703512229762500958679041285778430782443804351191811074126821062494661316953343584733719937494423828982141874290981860958303848841443214129004130787697843398085768415326086552369903184446484553811667610590088970324939644328344136432155656942214580814739404689343808663928282320174221851232619199634576066100199107594544289589595960304261269738953967136101822734650734397315247930616492608759419803567886825109367935570337465683594659504814218986697928013193195090372672668693673770705095692354195587811392958753875082906033302521659106164061879083417457873566844005100342927907700877283490656192819602530122532449963022351046497148694941549535531207979316555994247676397008027521438208149566406334506713450890994646521326072171492216646239221350820586134564857176989744444324822415179134610987354954684815279537563578417618985607970650578812883186576970547678327776928001
d0 = 692555819805793317113783039617500003557843427295064690270052006494675624028588567893917054913916381049910617873446512184945646557217520123087802782696848273651543790059149961645980805062082905274950709569964817311327609743017542268678296922538742625225273476723372578669208487513501290219817248076451599822453462673420495812353113308887337887157725465774800697591521048697595115923518397822440910895382445120631472521164758891983203042473061211813805667323614898850967617093235052188767432688946960689024892083738997795340706155808839080033544264680736416891544847252308464961615256330722316846644797558539878664704323194300871359077964780829536440414713005306355429443508252501736526361465491523417471289412353702307854173840504690343253243770921937429255163070136575411802979069056366720363994306513840048097318383847851118184935368616797862581861434578052208471864506525568444632207717079097626628266771743917694713403814281157564889332120083875392300707813335328094702070801651993908595562505929237530528527122417181328131161783445748216579395304470504021556837349052678371147813533040498470352267972960903211655930881764695439876356939005390594564763938665139142743572759494510593948628850161355676265013573395181115731806010561
e = 65537
n = 698664348910354605992334201517949906612437422182080146022849552823741708822757357522068253615746226600393943777662460271300764091194578786817396265156137942711366685689097208244452989676647487269940961964884924452504118584572080962723501407124277683476829441598726505268208802508656087327383827769016816968846323859798642849180869203321061866736282461832447406533703512229762534718228640067586431737506487896332115576147394544398234041012904714094353905418347483184942698635711551011802421075148960207373386724462718808279274327912911574584305111124940624103608874202956251117222718677568295257185135186786929963739742282929990897652065207753386268886442140214575551708441130682172734226109045575037238370046592416318838386052323167429866133596452311623190782432590327878356009615660686535726451011523553276842803390256038806825246369935694605741040553788296168910629212610858098463463495162871310794597321246516194730214409634830475214466650723284060608258946367391607896483337789406225301848670532630693209126093439641618009725589130603354848594114773629746956978614323856143192805454242046838861179695951985888544785958461175721372286209853205888455644017834031469670186411936879612338415876347940683809413543426211858975805873523
c = 111550078518246633066631726252566550310559790360290371527037539337426614410391049540226071099565395038663245989775049521515501173415179258009025310349457928619270539097879677081881762426682124527978529964448810246961950766648646458040959742583701301148517837500257865431705497432163681163017905778907120646175242173811680114453710449363960505400023858746288641623601728773244973081773772467143587564108399804325860425125007456240419748367236134705306272375678946945012555805515065148886922490582141784485022664040344635568073155371580696805423152037004511555834712607362012577417743917468051307967089477572383630317065382448635164293534089318333519868237954904029922062357326514587624258367212086772577605688733851193621036316410243338573044700827756269425564473376750855571701374518535064137226567853807948556383203481108410159397097945753559303202148649177210375763144711913480027673227946442984036490253309252106888769630620698049189574421895508501898900144059137691451183780895753516561980671157558568540152370075258851300828054960582864601084029805892835636508573083365848436608145075666428034812041785240108227976311208241928681443555461076605848780485520346538827617500981804287595269225955512538644647985580052553505501670729def factorize(n, e, d):k = e * d - 1s = 0while k % 2 == 0:s += 1k //= 2t = kprint("s =", s)while True:g = randint(2, n-1)x = pow(g, t, n)if x == 1 or x == n-1:continuex_prev = xfor i in range(1, s+1):x_curr = pow(x_prev, 2, n)if x_curr == 1:if x_prev != 1 and x_prev != n-1:p = gmpy2.gcd(x_prev-1, n)if p != 1 and p != n:return p, n // pelse:breakx_prev = x_currp0, q0 = factorize(n0, e, d0)
print("p0=", p0)
print("q0=", q0)
'''
p0 = 23559112322359892487415493357687945399916840813048720032015640022993179499698194726564038954867975145224101717410500788018665532740414648096218556083723562345372959015374045050552455844554330766541921870159557812949496917605599242614125230137521697978751282921690869247511788457275143011603712883656429332448988487178250561389683934891788051720255295399514236528291945865113776232890653358619866442931060751013185682558314648376941322739793046613966365524152778912454902705324332787727191279975413037779145405054684075470494050484041655766388599278746911239331305210450923435447914502415172793163945566249986863941989
q0 = 29655801090911820220465895916658585245170535241131729049544632830718118252103529856563715296534285207724810647363119927484978447847523627654235493184470570430421744861481058030359513934914098204738179829952921690840263503192709359971671829097663634801681084552013490806522920061920357656404614713132174602817888600367895249162712082950428828742310146530442485121697545062123053209063327061120317553535689001289229495902763780179611909194025669199771755263009246312241412756680348431558853789539930465563154690892559242433468941071495332061458808191857451705535718319217880359688658360017016775492952326037944456940909
'''

得到p0和q0后就可以进行求小根的方法进行已知高位攻击求出p和q。

第一版代码

from sage.all import *p0 = 23559112322359892487415493357687945399916840813048720032015640022993179499698194726564038954867975145224101717410500788018665532740414648096218556083723562345372959015374045050552455844554330766541921870159557812949496917605599242614125230137521697978751282921690869247511788457275143011603712883656429332448988487178250561389683934891788051720255295399514236528291945865113776232890653358619866442931060751013185682558314648376941322739793046613966365524152778912454902705324332787727191279975413037779145405054684075470494050484041655766388599278746911239331305210450923435447914502415172793163945566249986863941989
q0 = 29655801090911820220465895916658585245170535241131729049544632830718118252103529856563715296534285207724810647363119927484978447847523627654235493184470570430421744861481058030359513934914098204738179829952921690840263503192709359971671829097663634801681084552013490806522920061920357656404614713132174602817888600367895249162712082950428828742310146530442485121697545062123053209063327061120317553535689001289229495902763780179611909194025669199771755263009246312241412756680348431558853789539930465563154690892559242433468941071495332061458808191857451705535718319217880359688658360017016775492952326037944456940909
n = 698664348910354605992334201517949906612437422182080146022849552823741708822757357522068253615746226600393943777662460271300764091194578786817396265156137942711366685689097208244452989676647487269940961964884924452504118584572080962723501407124277683476829441598726505268208802508656087327383827769016816968846323859798642849180869203321061866736282461832447406533703512229762534718228640067586431737506487896332115576147394544398234041012904714094353905418347483184942698635711551011802421075148960207373386724462718808279274327912911574584305111124940624103608874202956251117222718677568295257185135186786929963739742282929990897652065207753386268886442140214575551708441130682172734226109045575037238370046592416318838386052323167429866133596452311623190782432590327878356009615660686535726451011523553276842803390256038806825246369935694605741040553788296168910629212610858098463463495162871310794597321246516194730214409634830475214466650723284060608258946367391607896483337789406225301848670532630693209126093439641618009725589130603354848594114773629746956978614323856143192805454242046838861179695951985888544785958461175721372286209853205888455644017834031469670186411936879612338415876347940683809413543426211858975805873523
c = 111550078518246633066631726252566550310559790360290371527037539337426614410391049540226071099565395038663245989775049521515501173415179258009025310349457928619270539097879677081881762426682124527978529964448810246961950766648646458040959742583701301148517837500257865431705497432163681163017905778907120646175242173811680114453710449363960505400023858746288641623601728773244973081773772467143587564108399804325860425125007456240419748367236134705306272375678946945012555805515065148886922490582141784485022664040344635568073155371580696805423152037004511555834712607362012577417743917468051307967089477572383630317065382448635164293534089318333519868237954904029922062357326514587624258367212086772577605688733851193621036316410243338573044700827756269425564473376750855571701374518535064137226567853807948556383203481108410159397097945753559303202148649177210375763144711913480027673227946442984036490253309252106888769630620698049189574421895508501898900144059137691451183780895753516561980671157558568540152370075258851300828054960582864601084029805892835636508573083365848436608145075666428034812041785240108227976311208241928681443555461076605848780485520346538827617500981804287595269225955512538644647985580052553505501670729
e = 65537
H = 2^800
p0_high = p0 // H
q0_high = q0 // H
pbar = p0_high * H
qbar = q0_high * HPR.<x> = PolynomialRing(Zmod(n))
f = pbar + x
roots = f.small_roots(X=H, beta=0.5)
if roots:p = pbar + roots[0]if n % p == 0:q = n // pprint("p found")else:f = qbar + xroots = f.small_roots(X=H, beta=0.5)if roots:q = qbar + roots[0]p = n // qprint("q found")else:print("false")
else:f = qbar + xroots = f.small_roots(X=H, beta=0.5)if roots:q = qbar + roots[0]p = n // qprint("q found")else:print("false")print(p,q)

这个脚本自己写也不复杂,看着长是是因为重复的逻辑写了四次。
但是运行了一次之后回显:

Traceback (most recent call last):File "/home/miaosama/program/crypto.sage.py", line 45, in <module>p = n // q~~^^~~File "sage/structure/element.pyx", line 1831, in sage.structure.element.Element.__floordiv__ (build/cythonized/sage/structure/element.c:21682)File "sage/structure/coerce.pyx", line 1238, in sage.structure.coerce.CoercionModel.bin_op (build/cythonized/sage/structure/coerce.c:15965)File "sage/structure/element.pyx", line 1829, in sage.structure.element.Element.__floordiv__ (build/cythonized/sage/structure/element.c:21647)File "sage/rings/finite_rings/integer_mod.pyx", line 1955, in sage.rings.finite_rings.integer_mod.IntegerMod_abstract._floordiv_ (build/cythonized/sage/rings/finite_rings/integer_mod.c:31863)File "sage/rings/finite_rings/integer_mod.pyx", line 2367, in sage.rings.finite_rings.integer_mod.IntegerMod_gmp.__invert__ (build/cythonized/sage/rings/finite_rings/integer_mod.c:36739)
ZeroDivisionError: inverse of Mod(29655801090911820220465895916658585245170535241131729049544632830718118252103529856563715296534285207724810647363119927484978447847523627654235493184470570430421744861481058030359513934914098204738179829952921690840263503192709359971671829097663634801681084552013490806522920061920357656404614713132174602817888600367895249162712082950428828742310146530442485121697545062123057248305657364824049598564229017259073023144546537571975399362376977381690913565383595631489145495579193888995526545046863773617253782014455946076711348119760492555419040885136452903846237028136619724695635664506203515542650965605684850598347, 698664348910354605992334201517949906612437422182080146022849552823741708822757357522068253615746226600393943777662460271300764091194578786817396265156137942711366685689097208244452989676647487269940961964884924452504118584572080962723501407124277683476829441598726505268208802508656087327383827769016816968846323859798642849180869203321061866736282461832447406533703512229762534718228640067586431737506487896332115576147394544398234041012904714094353905418347483184942698635711551011802421075148960207373386724462718808279274327912911574584305111124940624103608874202956251117222718677568295257185135186786929963739742282929990897652065207753386268886442140214575551708441130682172734226109045575037238370046592416318838386052323167429866133596452311623190782432590327878356009615660686535726451011523553276842803390256038806825246369935694605741040553788296168910629212610858098463463495162871310794597321246516194730214409634830475214466650723284060608258946367391607896483337789406225301848670532630693209126093439641618009725589130603354848594114773629746956978614323856143192805454242046838861179695951985888544785958461175721372286209853205888455644017834031469670186411936879612338415876347940683809413543426211858975805873523) does not exist

主播英语不好,所以交给ai去看了:(

这个错误表明在计算 n // q 时出现了问题,具体是在模 n 的环中尝试计算逆元时遇到了除零错误。这通常意味着我们找到的 q 并不是 n 的真正因子。让我们分析一下问题所在:我们使用已知高位攻击来寻找 p 和 q我们找到了一个根,但计算出的 q 并不是 n 的因子当我们尝试计算 n // q 时,由于 q 不是 n 的因子,导致计算失败

也就是说代码成功运行也找到了一个小根q,但是这个q并不是n的因子,所以导致环n遇到了除0错误。

也就是还要加个验证n % q 0或者 n % q0来验证找到的根是否为环n的根

加了之后我又运行发现了个事情,无论怎么改都显示同样的输出,所以我回顾了代码发现,求小根的时候给数据的定义并不是整数,而是实数,所以要参与到整数n的运行要先转化为sage中的整数,使用Inteager()函数在和求出的根相加的时候,就可以了。

最终变为如下代码:

from sage.all import *p0 = 23559112322359892487415493357687945399916840813048720032015640022993179499698194726564038954867975145224101717410500788018665532740414648096218556083723562345372959015374045050552455844554330766541921870159557812949496917605599242614125230137521697978751282921690869247511788457275143011603712883656429332448988487178250561389683934891788051720255295399514236528291945865113776232890653358619866442931060751013185682558314648376941322739793046613966365524152778912454902705324332787727191279975413037779145405054684075470494050484041655766388599278746911239331305210450923435447914502415172793163945566249986863941989
q0 = 29655801090911820220465895916658585245170535241131729049544632830718118252103529856563715296534285207724810647363119927484978447847523627654235493184470570430421744861481058030359513934914098204738179829952921690840263503192709359971671829097663634801681084552013490806522920061920357656404614713132174602817888600367895249162712082950428828742310146530442485121697545062123053209063327061120317553535689001289229495902763780179611909194025669199771755263009246312241412756680348431558853789539930465563154690892559242433468941071495332061458808191857451705535718319217880359688658360017016775492952326037944456940909
n = 698664348910354605992334201517949906612437422182080146022849552823741708822757357522068253615746226600393943777662460271300764091194578786817396265156137942711366685689097208244452989676647487269940961964884924452504118584572080962723501407124277683476829441598726505268208802508656087327383827769016816968846323859798642849180869203321061866736282461832447406533703512229762534718228640067586431737506487896332115576147394544398234041012904714094353905418347483184942698635711551011802421075148960207373386724462718808279274327912911574584305111124940624103608874202956251117222718677568295257185135186786929963739742282929990897652065207753386268886442140214575551708441130682172734226109045575037238370046592416318838386052323167429866133596452311623190782432590327878356009615660686535726451011523553276842803390256038806825246369935694605741040553788296168910629212610858098463463495162871310794597321246516194730214409634830475214466650723284060608258946367391607896483337789406225301848670532630693209126093439641618009725589130603354848594114773629746956978614323856143192805454242046838861179695951985888544785958461175721372286209853205888455644017834031469670186411936879612338415876347940683809413543426211858975805873523
c = 111550078518246633066631726252566550310559790360290371527037539337426614410391049540226071099565395038663245989775049521515501173415179258009025310349457928619270539097879677081881762426682124527978529964448810246961950766648646458040959742583701301148517837500257865431705497432163681163017905778907120646175242173811680114453710449363960505400023858746288641623601728773244973081773772467143587564108399804325860425125007456240419748367236134705306272375678946945012555805515065148886922490582141784485022664040344635568073155371580696805423152037004511555834712607362012577417743917468051307967089477572383630317065382448635164293534089318333519868237954904029922062357326514587624258367212086772577605688733851193621036316410243338573044700827756269425564473376750855571701374518535064137226567853807948556383203481108410159397097945753559303202148649177210375763144711913480027673227946442984036490253309252106888769630620698049189574421895508501898900144059137691451183780895753516561980671157558568540152370075258851300828054960582864601084029805892835636508573083365848436608145075666428034812041785240108227976311208241928681443555461076605848780485520346538827617500981804287595269225955512538644647985580052553505501670729
e = 65537
H = 2^800
p0_high = p0 // H
q0_high = q0 // H
pbar = p0_high * H
qbar = q0_high * HPR.<x> = PolynomialRing(Zmod(n))
f = pbar + x
roots = f.small_roots(X=H, beta=0.5)
if roots:p = pbar + Integer(roots[0])if n % p == 0:q = n // pprint("p found")else:f = qbar + xroots = f.small_roots(X=H, beta=0.5)if roots:q = qbar + Integer(roots[0])p = n // qprint("q found")else:print("false")
else:f = qbar + xroots = f.small_roots(X=H, beta=0.5)if roots:q = qbar + Integer(roots[0])p = n // qprint("q found")else:print("false")#print(p,q)
phi = (p-1) * (q-1)
d = pow(e,-1, phi)
m = pow(c, d, n)flag = long_to_bytes(int(m))
print("Flag:", flag.decode())
#Flag: dart{0031a52b-b3e2-403c-890b-f123d47656ee}

最后得到了flag如上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/936987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年迷你仓厂家行业选购指南:安东易/小型/微型/商用/搬家/装修/电商/恒温迷你仓厂家,聚焦安全与灵活,这份优质厂商推荐榜请收好

随着城市化进程加快、居民生活空间优化需求提升及中小企业仓储成本控制意识增强,迷你仓作为便捷化、个性化的仓储解决方案,已从传统仓储补充业态,逐步普及至个人储物、家庭搬家、企业周转等多个场景,2025 年市场规…

连锁餐饮拓展微信业务:试错 3 个月,终于找到靠谱方案

作为一家拥有 12 家门店的连锁餐饮品牌,今年初我们决定发力微信生态 —— 想做小程序点单、公众号会员运营,还要打通各门店的用户数据。可刚开始推进就处处碰壁:找定制开发公司,报价动辄几十万,还得等 3 个月以上…

图论 Walks Trails and Paths in Graph Theory 路径,链,简单路径

Walks Trails and Paths in Graph Theory - YouTubeClosed Walks, Closed Trails (Circuits) and Closed Paths (Directed Cycles) in Graph TheoryWalks, Trails, Paths, Cycles and Circuits in Graph - GeeksforGee…

2025 年国内面板生产厂家最新推荐排行榜,涵盖耐用 / 肤感 / 半透 / 防指纹 / 电镀 / 防静电面板等多特性优质面板厂家推荐

在当前面板行业快速发展但竞争格局复杂的背景下,市场上产品质量参差不齐,部分厂家技术能力不足、供应链不稳定、服务响应滞后等问题,给企业和采购方挑选优质面板产品带来极大困扰。尤其是不同领域对面板的耐用、肤感…

3、推荐统一使用 ResponseEntity<T> 作为控制器返回类型 - 详解

3、推荐统一使用 ResponseEntity<T> 作为控制器返回类型 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

2025年法兰保护罩/阀门保温罩/法兰罩/法兰防溅罩/法兰保护套厂家最新推荐榜单,专业防护与高效节能首选!

2025年法兰保护罩/阀门保温罩/法兰罩/法兰防溅罩/法兰保护套厂家最新推荐榜单,专业防护与高效节能首选!随着工业技术的不断进步,法兰保护罩、阀门保温罩、法兰罩、法兰防溅罩和法兰保护套等产品在工业生产中的应用越…

淘宝店铺全量商品接口深度开发:从分页优化到数据完整性保障 - 实践

淘宝店铺全量商品接口深度开发:从分页优化到数据完整性保障 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &quo…

从零开始掌握 uv:新一代超快 Python 项目与包管理器(含 Windows 支持) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

敏捷研发管理工具深度测评:ONES、Jira、YouTrack 等 10 款全维度分析

随着软件开发周期的缩短和业务需求的日益变化,敏捷开发已经成为各大开发团队的首选。根据《敏捷开发实践指南》的研究,适当的工具可以有效提升敏捷开发的效率,使团队能够在短期内完成更多的任务,同时保持高质量的交…

HyperWorks许可证与其他软件的卓越集成

随着工程设计和仿真分析领域的快速发展,单一软件已难以满足复杂项目的需求。这时,软件之间的集成与协作显得尤为重要。作为业界领先的工程仿真软件,HyperWorks以其强大的许可证管理功能和与其他软件的卓越集成能力,…

深入理解C++中的字符编码问题:从原理到实践 - 实践

深入理解C++中的字符编码问题:从原理到实践 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

2025 年老年记忆训练器厂家最新推荐榜:权威解析头部品牌创新优势与选购指南

我国人口老龄化持续加深,阿尔茨海默病等认知障碍疾病患者数量逐年攀升,记忆力衰退已成为影响老年人生活质量的核心问题。医学研究证实,早期非药物认知干预能有效延缓记忆衰退进程,但当前市场产品质量参差不齐 ——…

护理白板系统统一外网映射配置

护理白板系统统一外网映射配置备注:用的同事李寅花的手机号的账号 2026-10-14过期

LeetCode热题--207. 课程表--中等 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

融云:用 AI 提升应用活跃度,6 个实用玩法亲测有效

融云:用 AI 提升应用活跃度,6 个实用玩法亲测有效留存、促活是应用永恒的话题,无论是古典互联网还是现在的 AI 新时代。 不同的是,AI 技术爆发后,经典玩法能升级,全新交互正诞生。下面是我们结合实际案例梳理出的…

openldap之slappasswd

slappasswd 是 OpenLDAP 中用于生成加密密码的工具。它对于安全地存储LDAP密码非常重要。下面详细介绍它的使用方法: 基本用法 1. 交互式模式(最常用)bashslappasswd执行后:系统会提示:New password: (输入密码,…

杰理GPIO状态设置

高阻态/*----------------------------------------------------------------------------*/ /**@brief 把所有IO设置为高阻@param x:显示横坐标@return void@author Change.tsai@note void led7_clear(void…

【STM32 系列】理清 xxRAM、xxROM、xxFlash 的核心作用,附 H7 系列超便捷内存区域管理方法

前言 这篇文章我们会对各种内存进行一次较为详细的梳理,主要是分清它们的区别,使得我们可以更好地了解并利用好内存。 RAM、ROM、Flash 这三个总的概括,就使用一个表格来说明吧,表格如下:内存 存储类型 核心功能 …

深入理解 AbstractQueuedSynchronizer(AQS):构建高性能同步器的基石 - 指南

深入理解 AbstractQueuedSynchronizer(AQS):构建高性能同步器的基石 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fa…

2025 年清洗机厂家最新推荐:高压清洗机、超声波清洗机等多类型设备企业品牌权威榜单,帮企业高效筛选优质清洗设备

随着工业生产对设备洁净度与生产效率要求不断提升,清洗机市场需求日益旺盛,但市场品牌繁杂、产品质量参差不齐的问题也愈发凸显。许多企业在选购时,常因缺乏专业信息支撑,难以辨别设备技术是否适配自身行业、质量是…