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

21届acm线下密码题目real_easy_rsa

参加了湖南省线下的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.hskmm.com/?act=detail&tid=31035

相关文章:

  • 2025 年迷你仓厂家行业选购指南:安东易/小型/微型/商用/搬家/装修/电商/恒温迷你仓厂家,聚焦安全与灵活,这份优质厂商推荐榜请收好
  • 连锁餐饮拓展微信业务:试错 3 个月,终于找到靠谱方案
  • 图论 Walks Trails and Paths in Graph Theory 路径,链,简单路径
  • 2025 年国内面板生产厂家最新推荐排行榜,涵盖耐用 / 肤感 / 半透 / 防指纹 / 电镀 / 防静电面板等多特性优质面板厂家推荐
  • 3、推荐统一使用 ResponseEntity<T> 作为控制器返回类型 - 详解
  • 2025年法兰保护罩/阀门保温罩/法兰罩/法兰防溅罩/法兰保护套厂家最新推荐榜单,专业防护与高效节能首选!
  • 敏捷研发管理工具深度测评:ONES、Jira、YouTrack 等 10 款全维度分析
  • HyperWorks许可证与其他软件的卓越集成
  • 深入理解C++中的字符编码问题:从原理到实践 - 实践
  • 2025 年老年记忆训练器厂家最新推荐榜:权威解析头部品牌创新优势与选购指南
  • 护理白板系统统一外网映射配置
  • 基于MATLAB的梯度投影稀疏重建算法
  • openldap之slappasswd
  • 杰理GPIO状态设置
  • 【STM32 系列】理清 xxRAM、xxROM、xxFlash 的核心作用,附 H7 系列超便捷内存区域管理方法
  • 深入理解 AbstractQueuedSynchronizer(AQS):构建高性能同步器的基石 - 指南
  • 2025 年清洗机厂家最新推荐:高压清洗机、超声波清洗机等多类型设备企业品牌权威榜单,帮企业高效筛选优质清洗设备
  • 隐藏继承成员什么时候用到
  • 2025 旋转蒸发仪选型指南:适配科研与生产需求的优质厂家 TOP5 推荐
  • 今天被公司告知不续签合同了,我被优化了 哈哈哈
  • 2025 年混合机厂家最新推荐排行榜:强力混合机 / 倾斜式混合机 / 耐火材料混合机 / 锂电池材料混合机 / 球团强力混合机优质厂家推荐
  • Oracle OCM 认证的定位与价值
  • 2025 优质防爆接线盒/防爆穿线盒/防爆接电箱厂家推荐榜:安全与专业兼具的行业之选
  • 实验2 C语言分支与循环基础应用编程
  • Microsoft Purview实现数据泄露概率降低30%的技术解析
  • Day13-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\exception
  • 2025 值得关注的除锈剂厂家企业推荐榜单,覆盖多场景需求
  • Day3整形输入
  • 2025优质电缆/防火/模压/瓦楞/大跨距/热镀锌/热浸锌/不锈钢/光伏/铝合金/锌铝镁桥架厂家推荐:五家实力企业的技术与服务特色解析
  • 2025 领域优质石油/电厂/钢铁厂/化工/消防/船舶/住宅/管道/隧道/地铁电伴热带厂家推荐榜单,工业与民用场景全覆盖