做题杂记666

news2024/12/30 2:04:31

[XYCTF2024] 铜匠

题目描述:

from Crypto.Util.number import *
from secrets import flag

m = bytes_to_long(flag)
m1 = getRandomRange(1, m)
m2 = getRandomRange(1, m)
m3 = m - m1 - m2


def task1():
    e = 149
    p = getPrime(512)
    q = getPrime(512)
    n = p * q
    d = inverse(e,(p-1)*(q-1))
    return (pow(m1, e, n), d >> 222 << 222, n)


def task2():
    e = 65537
    p = getPrime(1024)
    q = getPrime(1024)
    n = p * q
    return (pow(m2, e, n), (p + q) & ((1 << 624) - 1), n)


def task3():
    e = 65537
    p = getPrime(512)
    q = getPrime(512)
    n = p * q
    return (pow(m3, e, n), (p ^ q) >> 200, n)


c1, leak1, n1 = task1()
c2, leak2, n2 = task2()
c3, leak3, n3 = task3()
print(c1, leak1, n1)
print(c2, leak2, n2)
print(c3, leak3, n3)
# (89623543982221289730635223555830551523170205418976759060541832483843039074358160566735322009158596405712449020903311144480669706226166537602750967447480664875090686428406188847601970724994074417752345460791736191511081890913041143570455636020205647345764692062144226011846336769477026234106683791286490222089, 138474880017294332349992670187778287774153347391371789199005713563195654993662610111557185709277805165708109047494971468100563949333712521647405765501704478862377527360106399421209690341743821320754482338590671565510629203215009008479290995785318405211007685664887994061938667418220613430135743123498167435264, 146331610798417415036517077006943013321623040860385791423062775325646472298267580898028515394910588437521335092742913111680737790430660749825981979147191282007208147041227246620008377726207734522466015971515317594545750944838673018946440525615131606652748549901880641896940968837669894325535750125282351577689)
# (5473961166821344576614003060897848014482672788904094340704447882490091115468180944569409159343222459801235179587721232166576530621751748850763430788036935832653535110975154800191323351333883661451331971042214143454441651165718504131976920077768864850035471790911190772583977173388975105970866592974077361193822302653046511418190410043729876062517148438923211673300268277037622337403526399584759202097925983596261279676101079771530118525540842499517622478819211528345668513680064744443628779623340175578509413636950545134641050948185944279029949957748464529075830770617236599864271566534714755373562527112224962839980,62964793504732923650344975634773688108135580826064134090114181449607062497690184718845295432644650580930430061411603385577783897575232298084007041511817031640186953023971498914096209984730,20748652069632848434897928314437138341436264859802586939154590237186029244907936870477844563166827587536149170710720365760129683024401957095447466056746469055173897234659911291443605912459271248059341147358511860537769587963189092648473894868209838600346115919726589891777340166174017389513260737891557712152871714337946675533597049874155202056200170954033849176655928144354665553271709442011723088448485570394208728775665739819536229908847043007472178803394055783543378990699834066614262050119443421709878598533329555838915158259138297060574425019923291353077080236769586821808150397875920110335669136563171420068201)
# (34640310217688693418173336791306022698488916505988760907493665070072623574363578354500529023855888624978101429772253437880445815006839767802433777006836665709335479076676231470534690281412388704665083311568028710188940132495410474044569100181764053297307413009214044407982980600917158732129850605715306726034, 3763587651775261955566046684899146246387485307521708557610018711932791630073528010801142052497, 94848869174430082173244966077736519396702141299429965725051314270443078621842166791082354594193554380275167898342497998871366256044865879909218309960595691008663632410356093966762639308253848450178310347612630814852054763933063313537694449475061227647475480417779126252294793767003555255527593551612032661749)

题目分析:
part1:
d高位攻击
在这里插入图片描述

exp:

from tqdm import *
from Crypto.Util.number import *
def get_full_p(p_high, n,d_high,bits):
    PR.<x> = PolynomialRing(Zmod(n))    
    f = x + p_high
    f = f.monic()
    roots = f.small_roots(X=2^(bits + 4), beta=0.4)  
    if roots:
        x0 = roots[0]
        p = gcd(x0 + p_high, n)
        return ZZ(p)


def find_p_high(d_high, e, n,bits):
    PR.<X> = PolynomialRing(RealField(1000))
    for k in tqdm(range(1, e+1)):
        f=e * d_high * X - (k*n*X + k*X + X-k*X**2 - k*n)
        results = f.roots()
        if results:
            for x in results:
                p_high = int(x[0]) >> 4 << 4
                p = get_full_p(p_high, n,d_high,bits)
                if p and p != 1:
                    return p


c1 = 89623543982221289730635223555830551523170205418976759060541832483843039074358160566735322009158596405712449020903311144480669706226166537602750967447480664875090686428406188847601970724994074417752345460791736191511081890913041143570455636020205647345764692062144226011846336769477026234106683791286490222089
leak1 = 138474880017294332349992670187778287774153347391371789199005713563195654993662610111557185709277805165708109047494971468100563949333712521647405765501704478862377527360106399421209690341743821320754482338590671565510629203215009008479290995785318405211007685664887994061938667418220613430135743123498167435264
n1 = 146331610798417415036517077006943013321623040860385791423062775325646472298267580898028515394910588437521335092742913111680737790430660749825981979147191282007208147041227246620008377726207734522466015971515317594545750944838673018946440525615131606652748549901880641896940968837669894325535750125282351577689
e1 = 149
p1 = find_p_high(leak1, e1, n1,222)
q1 = n1 // p1
d1 = inverse(e1,(p1 - 1) * (p1 - 1))
m1 = pow(c1,int(d1),n1)
# m1 = 11775517453863996563134035490381223284801389447022348837092806629482902301042769151917156039535676274713308069533584211081526392912472011090033981642998869

part2:
已知 ( p + q ) 低 624 位 又知道 n = p ∗ q 那么联立 l e a k 2 和 n 2 % 2 624 即可得到 p 或 q 的低位 之后 c o p p e r 一下即可得到完整的 p 或 q 已知(p + q)低624位\\ 又知道n = p * q\\ 那么联立leak2和n2 \% 2^{624}即可得到p或q的低位\\ 之后copper一下即可得到完整的p或q 已知(p+q)624又知道n=pq那么联立leak2n2%2624即可得到pq的低位之后copper一下即可得到完整的pq
思路和d低位攻击差不多
exp:

from Crypto.Util.number import *

def get_full_p(p_low, n):
    PR.<x> = PolynomialRing(Zmod(n))
    nbits = n.nbits()
    p_lowbits = p_low.nbits()
    f = 2^p_lowbits*x + p_low
    f = f.monic()
    roots = f.small_roots(X=2^(nbits//2-p_lowbits), beta=0.4)  
    if roots:
        x0 = roots[0]
        p = gcd(2^p_lowbits*x0 + p_low, n)
        return ZZ(p)


def find_p_low(low, n):
    X = var('X')
    results = solve_mod([n == X * (low - X)], 2^low.nbits())
    for x in results:
        p_low = ZZ(x[0])
        p = get_full_p(p_low, n)
        if p and p != 1:
            return p

c2 = 5473961166821344576614003060897848014482672788904094340704447882490091115468180944569409159343222459801235179587721232166576530621751748850763430788036935832653535110975154800191323351333883661451331971042214143454441651165718504131976920077768864850035471790911190772583977173388975105970866592974077361193822302653046511418190410043729876062517148438923211673300268277037622337403526399584759202097925983596261279676101079771530118525540842499517622478819211528345668513680064744443628779623340175578509413636950545134641050948185944279029949957748464529075830770617236599864271566534714755373562527112224962839980
leak2 = 62964793504732923650344975634773688108135580826064134090114181449607062497690184718845295432644650580930430061411603385577783897575232298084007041511817031640186953023971498914096209984730
n2 = 20748652069632848434897928314437138341436264859802586939154590237186029244907936870477844563166827587536149170710720365760129683024401957095447466056746469055173897234659911291443605912459271248059341147358511860537769587963189092648473894868209838600346115919726589891777340166174017389513260737891557712152871714337946675533597049874155202056200170954033849176655928144354665553271709442011723088448485570394208728775665739819536229908847043007472178803394055783543378990699834066614262050119443421709878598533329555838915158259138297060574425019923291353077080236769586821808150397875920110335669136563171420068201
e2 = 65537
p2 = find_p_low(leak2, n2)
q2 = n2 // p2
d2 = inverse(e2,(p2 - 1) * (q2 - 1))
m2 = pow(c2,d2,n2)
print(m2)
# m2 = 637474741382124491125351127892971159828342019036405954553729272346832023284163998914076056292480317209934960796148267118196288511438260371617371342378683017480560448795

part3:
请参考:
https://tangcuxiaojikuai.xyz/post/342113ee.html
exp:

from gmpy2 import *
c3 = 34640310217688693418173336791306022698488916505988760907493665070072623574363578354500529023855888624978101429772253437880445815006839767802433777006836665709335479076676231470534690281412388704665083311568028710188940132495410474044569100181764053297307413009214044407982980600917158732129850605715306726034
leak3 = 3763587651775261955566046684899146246387485307521708557610018711932791630073528010801142052497
n3 = 94848869174430082173244966077736519396702141299429965725051314270443078621842166791082354594193554380275167898342497998871366256044865879909218309960595691008663632410356093966762639308253848450178310347612630814852054763933063313537694449475061227647475480417779126252294793767003555255527593551612032661749

leak3 = leak3 << 200
leak3 = bin(leak3)[2:].zfill(512)
leakbits = 200

def findp(pp,qq,l):
    p_Min = int(pp + (512-l)*"0",2)
    p_Max = int(pp + (512-l)*"1",2)
    q_Min = int(qq + (512-l)*"0",2)
    q_Max = int(qq + (512-l)*"1",2)

    if(l == 512 - leakbits):
        R.<x> = PolynomialRing(Zmod(n3))
        phigh = p_Min
        f3 = phigh + x
        root = f3.small_roots(X=2^leakbits, beta=0.4)
        if root != []:
            p3 = phigh + int(root[0])
            q3 = n3 // p3
            d = gmpy2.invert(e,(p3-1)*(q3-1))
            m3 = pow(c3,d,n3)
            print(f"m3 = {m3}")
    
    if (p_Max * q_Max < n3) or (p_Min * q_Min > n3):
        return
    
    # 以下是根据异或来操作的
    if leak3[l] == '0':
        findp(pp + '1',qq + '1',l+1)
        findp(pp + '0',qq + '0',l+1)
    if leak3[l] == '1':
        findp(pp + '1',qq + '0',l+1)
        findp(pp + '0',qq + '1',l+1)

findp('1','1',1)
# m3 = 334132319136130454419386550847309794306389604470819859736266178647538718607667083644497296078054806893307642673035506225568447967643224450929477875810797878149197295514

[2023 江苏省数据安全竞赛] hardrsa

来源在此
题目描述:

from Crypto.Util.number import *
from random import randint
# from secret import message
p, q = [getPrime(1024) for _ in range(2)]
n = p * q

def pad(msg: bytes) -> bytes:
    return msg + long_to_bytes(len(msg) & 0xff) * (2048 // 8 - len(msg) - 1)

def f(x: int, poly: list[int]) -> int:
    return sum([
        poly[i] * pow(x, i, n) for i in range(len(poly))
    ]) % n

def commit(m: int, d: int, key: int, poly: list[int]) -> (int, int):
    sig = pow(m, d, n)
    c1 = (sig + pow(key, 8, n) + pow(key, 4, n) + pow(key, 2, n)) % n
    c2 = f(key, poly)
    return c1, c2

def reveal(comm: (int, int), e: int, key: int, poly: list[int]) -> int:
    c1, c2 = comm
    assert f(key, poly) == c2
    sig = (c1 - pow(key, 8, n) - pow(key, 4, n) - pow(key, 2, n)) % n
    return pow(sig, e, n)

def part1(msg):
    e = 233
    assert GCD(e, (p - 1) * (q - 1)) == 1

    m = bytes_to_long(pad(msg))
    c = pow(m, e, n)
    print(f"# Part1: RSA-Encrypted Ciphertext\n"
          f"{e = }\n"
          f"{n = }\n"
          f"{c = }\n")

def part2(msg):
    e = getPrime(256)
    assert GCD(e, (p - 1) * (q - 1)) == 1

    d = inverse(e, (p - 1) * (q - 1))
    key = getPrime(1024)
    poly = [randint(n // 2, n) for _ in range(8)]

    m = bytes_to_long(msg)
    comm = commit(m, d, key, poly)
    print(f"# Part2: RSA-Committed Promise\n"
          f"{e = }\n"
          f"{n = }\n"
          f"{poly = }\n"
          f"{comm = }\n")

part1(message)
part2(message)

'''
# Part1: RSA-Encrypted Ciphertext
e = 233
n = 11935450457829533235861673228297207102011152676397253867146913792126035709631838912054379483925100858088716543548565883127607546205725887108101118334914085611884304295616391635635730462010491550855190770776531821441961930152081076014630292188457483421965231052149991813167636622576040955869771100692060798499848216781403839908159869808167642603742236390452605002523104832413884128824863453874477895814675168541067154527938435375815931877307360825011810649184534014412683654903241610167115302439866360069493031086872354910005880773459207712493126679315455220650236256646891830311728264963649315399787003295334546874291
c = 7252592878713436249451954839264355322580930765631177572271016442117341039243270139159572914726052278102731751307948710556102124039673892501351580382026911586520822698910216934337820791611920030598567775355231131126300774119520299748279014958652077682887635170584723744587650744421280998057075011222009042174385778453331646210379693618543179886347307521772868295540264296894711602178922977038080083149136928926845871859677401680541048431032673765061924102033485570287098238695235990854284581798656185853973943961983020641995838344765211070928405487458023474992011192333056478388071341171355197120988215168198599723008

# Part2: RSA-Committed Promise
e = 66193637341723367163125702898112480448278699637268148343857725442855402823431
n = 11935450457829533235861673228297207102011152676397253867146913792126035709631838912054379483925100858088716543548565883127607546205725887108101118334914085611884304295616391635635730462010491550855190770776531821441961930152081076014630292188457483421965231052149991813167636622576040955869771100692060798499848216781403839908159869808167642603742236390452605002523104832413884128824863453874477895814675168541067154527938435375815931877307360825011810649184534014412683654903241610167115302439866360069493031086872354910005880773459207712493126679315455220650236256646891830311728264963649315399787003295334546874291
poly = [11717154796621555517773089565161800782497395722578959209529354534025874232277165805913450430518606899030436997688640019197332182511107284797218734095249300649807218465147399703372218739746124711200544753873488683088277396707752681278994522913785476758026448815685216381723435987067431688479748324396207672503845734170132747031467431651462218384749316037680784863900868165022343622041751554333022117572879116218759879246367088427084626950955537463817968031017275910364363695899152710198165120432170787171341528864286158526038651919017107408570791186937519694774479837991365808631767140379749029359380372242375950137980, 9123862087464108309368301961629788915272772896023134293061688494597654503820136260901587831268936385580664649067767056115754724046745958708702235170960467356062328703981921906752172049390790202666123073269199722768061043975957820847564911432200111405506704374689942732871658793810805164611038997319494337357970794059964303933995742679251310010710434981636137595085517852847956640902442517513717087059546226466932055404728069004610675179760781279470558117788079744090471741006843223391295194412058215189490450122125518118132532661928747925982914732441440478529947224247988342993141712946093256348898996486327422944643, 6030603763346983288102354051890376530618029881435881726123892326247756715375950846629522738204125453587401831309679161545839726580035304449416761250948280327548535169936710507270611945843758842074476358246176098954644815210291073632368712607495031631913377358289661882694855436741228045084898247782669601243425453739817361547681943880579046765521731792701727321918301930375236655162783436465648090046259078120078910758575245396369709495063070202433832221772728021708079141746515469950248160534726502810704256703088684677877258573049270790396920638239330550633086994873425126929073220720355594488969185367608970916707, 9716821256832823750824128939107476939193936880337072944057098552215636341970779759899504078211465219351423745606682464111980567519009576095570498485630378890832910178268396634042751260634975171396984879182577992189999471936271429379306815019808996603918680787757713732404409692378153404122817226376865296438358486825612038858671776168645459752591925049260849071890295705474681598072886213619765003334857584781191985867775067185431488903206792188339131394272348988190482038716689478427650052247117559254256426511237932521351563089652047479479797300938563071283204961821455011631287889953996753731046822530037290627603, 11666333796778950070167408874398723214755352342048420236509233384060504228691247439421717776145154660819665260614606719030374746157097188777077905502366283706404249089084254210184487000990590270597382395207166506919474285640547576022841376382228267993104083461046139626378377974880966684427584303435662417721364008851870996677773917720510662526494737368571401785448409850024786090719768664502422761048062510586525467980024015286711938702512216482448086269597385419099772350149085440682892594663347642016624766961661170116360402443166746640256191226904369488864228395770803375247648092252065676886829888128110190309444, 11462478619099457240194769131836026270676403653501558282234968840872201162571883741201212219688281503510052098158124641727050288323198630131726234941868641468115278637960576287497767164456374120707437312761564310114818371263585487215911621560151358932205369221540130826905285545384305252671441989503441136412038093124085709642767025279350701000689026612157516744318724863351212190331852873715100901776905551563639179863329686328110637392713048373928191537946089436183622931782516720136751294476526680955429995943935488708846823839471792834286557115607414856063416087088477870164924987940894347486987836314461869534685, 10653980645418567411513922726616332470333513058407903035252559634113729870896307952345894573596782737100406813700290955080352696027100830934620756512872071900141804524610003605512659517424571217583346011965481480902253618773638355461764615453623374981103761629025970935810383120788534231421966726189585137512500570267960570464567388134331962043004849033375701972321858826974571976630891280420154316273033822618993014775803644483310026324771611118893293874122154993194283048698946653630901390782848148154411901241076544121228997263925606737607053972716874433300890330943412885434902240474709761223385352589083032128765, 10333595582803945043794471549604060392892058436121718182876444277996436845270662996790111238164033031406294804268590041670028232929474601883136059254591114821360112812291665655800401763541770303414040301090112758998311872983916961222346986656419661796203670733971009015803316347392237554891453769853704667050186727532712938810529943794137758599829378190680080965770951235622571154549350843468969908612054253674618037317066245764371279129776346266283585071808588302272504846382220877158974560863342504477881966924796683784677005619901829479041024077089614741081459831955279053575767736159622130675063748407061992052183]
comm = (10564327899571559803556847534640695884330979746141728381165331691371976198263843416751526335144564535035858053981517608346244582495510435781708514545410097533789005704048949775023251844189682064338358890427739102350645579483449459063227298628580813444257846278172112872070476617876388978632815732351176279459891770448714218081580878962036244554120215500496692247248020278906488898449151646331624912262205484811525189621806737849258225367134474296238235621600330628737449413319226263301240126177028279222960781645584351180328940683511286708507993883536602761937997289906562917482293638052704507924397633424367496240964, 4387528105610677136382722097833805553385843892958316305467187670486199250717569327341072891778254838060236323831885558131143386943636641524724956236926177315970135623681789134933521529522559017273929375073606157451115549453689875510487618793700227395725601364775309166607448269494881759434610031015774783174435486283695473704010367742281324624499239551547535691273360430539739519609019906949849114055192830821910951442964212279996201740422429695430649919698399420612775831374301153008912976259171898412262142433496285240507322095993886385920265570293733256427242653393188675651145896591757150999795300092930798687689)
'''

记录解法:
已知:
c 1 ≡ m d + k 8 + k 4 + k 2 ( m o d n ) c_1\equiv m^d+k^8+k^4+k^2\pmod{\begin{array}{c}n\\\end{array}} c1md+k8+k4+k2(modn)
c 2 ≡ p o l y 0 + p o l y 1 ⋅ k + p o l y 2 ⋅ k 2 + p o l y 3 ⋅ k 3 + p o l y 4 ⋅ k 4 + p o l y 5 ⋅ k 5 + p o l y 6 ⋅ k 6 + p o l y 7 ⋅ k 7   ( m o d   n ) c_2\equiv poly_0+poly_1\cdot k+poly_2\cdot k^2+poly_3\cdot k^3+poly_4\cdot k^4+poly_5\cdot k^5+poly_6\cdot k^6+poly_7\cdot k^7\mathrm{~(mod~}n) c2poly0+poly1k+poly2k2+poly3k3+poly4k4+poly5k5+poly6k6+poly7k7 (mod n)
可以得到三个等式:
1. f 1 ( k ) ≡ ∑ i = 0 7 p o l y i k i − c 2   ( m o d     n ) 1. f_1(k) \equiv\sum_{i=0}^7poly_ik^i-c_2\mathrm{~(mod~}\mathrm{~}n) 1.f1(k)i=07polyikic2 (mod  n)
2. f 2 ( m ) ≡ ( p a d ( m ) ) 233 − c   ( m o d   n ) 2. f_2(m)\equiv(pad(m))^{233}-c\mathrm{~(mod~}n) 2.f2(m)(pad(m))233c (mod n)
3. m ≡ ( c 1 − k 8 − k 4 − k 2 ) e   ( m o d     n ) 3. m\equiv(c_1-k^8-k^4-k^2)^e\mathrm{~(mod~}\mathrm{~}n) 3.m(c1k8k4k2)e (mod  n)
直接把 3 式带到 2 式中会导致 f 2 的度过高,所以优化一下 已知 f 1 ( k ) = k n ,又知道在模 k n 下满足的式子在模 n 下一定成立,故把 m 带入 f 2 再模上多项式 f 1 这样 f 2 的度就低于 8 ,然后联立它和 f 1 差不多就能求出 k 了 ( 里面的 p a d d i n g 部分浅爆一下就行 ) 直接把3式带到2式中会导致f_2的度过高,所以优化一下\\ 已知f_1(k) = kn,又知道在模kn下满足的式子在模n下一定成立,故把m带入f_2再模上多项式f_1\\ 这样f_2的度就低于8,然后联立它和f_1差不多就能求出k了\\ (里面的padding部分浅爆一下就行) 直接把3式带到2式中会导致f2的度过高,所以优化一下已知f1(k)=kn,又知道在模kn下满足的式子在模n下一定成立,故把m带入f2再模上多项式f1这样f2的度就低于8,然后联立它和f1差不多就能求出k(里面的padding部分浅爆一下就行)

( 不模 f 1 , 直接模 n 出不来结果,试过,不过我也不知道原因 ) (不模f_1,直接模n出不来结果,试过,不过我也不知道原因) (不模f1,直接模n出不来结果,试过,不过我也不知道原因)

exp:

# sage
from Crypto.Util.number import *
e1 = 233
c = 7252592878713436249451954839264355322580930765631177572271016442117341039243270139159572914726052278102731751307948710556102124039673892501351580382026911586520822698910216934337820791611920030598567775355231131126300774119520299748279014958652077682887635170584723744587650744421280998057075011222009042174385778453331646210379693618543179886347307521772868295540264296894711602178922977038080083149136928926845871859677401680541048431032673765061924102033485570287098238695235990854284581798656185853973943961983020641995838344765211070928405487458023474992011192333056478388071341171355197120988215168198599723008
e2 = 66193637341723367163125702898112480448278699637268148343857725442855402823431
n = 11935450457829533235861673228297207102011152676397253867146913792126035709631838912054379483925100858088716543548565883127607546205725887108101118334914085611884304295616391635635730462010491550855190770776531821441961930152081076014630292188457483421965231052149991813167636622576040955869771100692060798499848216781403839908159869808167642603742236390452605002523104832413884128824863453874477895814675168541067154527938435375815931877307360825011810649184534014412683654903241610167115302439866360069493031086872354910005880773459207712493126679315455220650236256646891830311728264963649315399787003295334546874291
poly = [11717154796621555517773089565161800782497395722578959209529354534025874232277165805913450430518606899030436997688640019197332182511107284797218734095249300649807218465147399703372218739746124711200544753873488683088277396707752681278994522913785476758026448815685216381723435987067431688479748324396207672503845734170132747031467431651462218384749316037680784863900868165022343622041751554333022117572879116218759879246367088427084626950955537463817968031017275910364363695899152710198165120432170787171341528864286158526038651919017107408570791186937519694774479837991365808631767140379749029359380372242375950137980, 9123862087464108309368301961629788915272772896023134293061688494597654503820136260901587831268936385580664649067767056115754724046745958708702235170960467356062328703981921906752172049390790202666123073269199722768061043975957820847564911432200111405506704374689942732871658793810805164611038997319494337357970794059964303933995742679251310010710434981636137595085517852847956640902442517513717087059546226466932055404728069004610675179760781279470558117788079744090471741006843223391295194412058215189490450122125518118132532661928747925982914732441440478529947224247988342993141712946093256348898996486327422944643, 6030603763346983288102354051890376530618029881435881726123892326247756715375950846629522738204125453587401831309679161545839726580035304449416761250948280327548535169936710507270611945843758842074476358246176098954644815210291073632368712607495031631913377358289661882694855436741228045084898247782669601243425453739817361547681943880579046765521731792701727321918301930375236655162783436465648090046259078120078910758575245396369709495063070202433832221772728021708079141746515469950248160534726502810704256703088684677877258573049270790396920638239330550633086994873425126929073220720355594488969185367608970916707, 9716821256832823750824128939107476939193936880337072944057098552215636341970779759899504078211465219351423745606682464111980567519009576095570498485630378890832910178268396634042751260634975171396984879182577992189999471936271429379306815019808996603918680787757713732404409692378153404122817226376865296438358486825612038858671776168645459752591925049260849071890295705474681598072886213619765003334857584781191985867775067185431488903206792188339131394272348988190482038716689478427650052247117559254256426511237932521351563089652047479479797300938563071283204961821455011631287889953996753731046822530037290627603, 11666333796778950070167408874398723214755352342048420236509233384060504228691247439421717776145154660819665260614606719030374746157097188777077905502366283706404249089084254210184487000990590270597382395207166506919474285640547576022841376382228267993104083461046139626378377974880966684427584303435662417721364008851870996677773917720510662526494737368571401785448409850024786090719768664502422761048062510586525467980024015286711938702512216482448086269597385419099772350149085440682892594663347642016624766961661170116360402443166746640256191226904369488864228395770803375247648092252065676886829888128110190309444, 11462478619099457240194769131836026270676403653501558282234968840872201162571883741201212219688281503510052098158124641727050288323198630131726234941868641468115278637960576287497767164456374120707437312761564310114818371263585487215911621560151358932205369221540130826905285545384305252671441989503441136412038093124085709642767025279350701000689026612157516744318724863351212190331852873715100901776905551563639179863329686328110637392713048373928191537946089436183622931782516720136751294476526680955429995943935488708846823839471792834286557115607414856063416087088477870164924987940894347486987836314461869534685, 10653980645418567411513922726616332470333513058407903035252559634113729870896307952345894573596782737100406813700290955080352696027100830934620756512872071900141804524610003605512659517424571217583346011965481480902253618773638355461764615453623374981103761629025970935810383120788534231421966726189585137512500570267960570464567388134331962043004849033375701972321858826974571976630891280420154316273033822618993014775803644483310026324771611118893293874122154993194283048698946653630901390782848148154411901241076544121228997263925606737607053972716874433300890330943412885434902240474709761223385352589083032128765, 10333595582803945043794471549604060392892058436121718182876444277996436845270662996790111238164033031406294804268590041670028232929474601883136059254591114821360112812291665655800401763541770303414040301090112758998311872983916961222346986656419661796203670733971009015803316347392237554891453769853704667050186727532712938810529943794137758599829378190680080965770951235622571154549350843468969908612054253674618037317066245764371279129776346266283585071808588302272504846382220877158974560863342504477881966924796683784677005619901829479041024077089614741081459831955279053575767736159622130675063748407061992052183]
comm = (10564327899571559803556847534640695884330979746141728381165331691371976198263843416751526335144564535035858053981517608346244582495510435781708514545410097533789005704048949775023251844189682064338358890427739102350645579483449459063227298628580813444257846278172112872070476617876388978632815732351176279459891770448714218081580878962036244554120215500496692247248020278906488898449151646331624912262205484811525189621806737849258225367134474296238235621600330628737449413319226263301240126177028279222960781645584351180328940683511286708507993883536602761937997289906562917482293638052704507924397633424367496240964, 4387528105610677136382722097833805553385843892958316305467187670486199250717569327341072891778254838060236323831885558131143386943636641524724956236926177315970135623681789134933521529522559017273929375073606157451115549453689875510487618793700227395725601364775309166607448269494881759434610031015774783174435486283695473704010367742281324624499239551547535691273360430539739519609019906949849114055192830821910951442964212279996201740422429695430649919698399420612775831374301153008912976259171898412262142433496285240507322095993886385920265570293733256427242653393188675651145896591757150999795300092930798687689)

R.<x,s> = PolynomialRing(Zmod(n))
f1 = 0
for i in range(len(poly)):
    f1 += poly[i] * x ^ i
f1 -= comm[1]
# 求m模f1下的e次方
f = comm[0] - x ^ 8 - x ^ 4 - x ^ 2
F = 1
for i in bin(e2)[2:][::-1]:
    if i == '1':
        F = (F * f) % f1
    f = (f * f) % f1

for i in range(1,255):
    print(i)
    f = deepcopy(F)
    
    # 爆破一下填充,带入f2,求233次
    f = f * 256 ^ (255 - i) + bytes_to_long(long_to_bytes(i) * (255 - i))
    FF = 1
    for i in bin(e1)[2:][::-1]:
        if i == '1':
            FF = FF * f % f1
        f = f * f % f1
    f2 = FF - c
    
    # 求f1 和 f2的结式,得到(x - k)
    ans = Ideal([f1,f2]).groebner_basis()
    if ans != [1]:
        print(ans)
        break
# python
from Crypto.Util.number import *
e2 = 66193637341723367163125702898112480448278699637268148343857725442855402823431
n = 11935450457829533235861673228297207102011152676397253867146913792126035709631838912054379483925100858088716543548565883127607546205725887108101118334914085611884304295616391635635730462010491550855190770776531821441961930152081076014630292188457483421965231052149991813167636622576040955869771100692060798499848216781403839908159869808167642603742236390452605002523104832413884128824863453874477895814675168541067154527938435375815931877307360825011810649184534014412683654903241610167115302439866360069493031086872354910005880773459207712493126679315455220650236256646891830311728264963649315399787003295334546874291
poly = [11717154796621555517773089565161800782497395722578959209529354534025874232277165805913450430518606899030436997688640019197332182511107284797218734095249300649807218465147399703372218739746124711200544753873488683088277396707752681278994522913785476758026448815685216381723435987067431688479748324396207672503845734170132747031467431651462218384749316037680784863900868165022343622041751554333022117572879116218759879246367088427084626950955537463817968031017275910364363695899152710198165120432170787171341528864286158526038651919017107408570791186937519694774479837991365808631767140379749029359380372242375950137980, 9123862087464108309368301961629788915272772896023134293061688494597654503820136260901587831268936385580664649067767056115754724046745958708702235170960467356062328703981921906752172049390790202666123073269199722768061043975957820847564911432200111405506704374689942732871658793810805164611038997319494337357970794059964303933995742679251310010710434981636137595085517852847956640902442517513717087059546226466932055404728069004610675179760781279470558117788079744090471741006843223391295194412058215189490450122125518118132532661928747925982914732441440478529947224247988342993141712946093256348898996486327422944643, 6030603763346983288102354051890376530618029881435881726123892326247756715375950846629522738204125453587401831309679161545839726580035304449416761250948280327548535169936710507270611945843758842074476358246176098954644815210291073632368712607495031631913377358289661882694855436741228045084898247782669601243425453739817361547681943880579046765521731792701727321918301930375236655162783436465648090046259078120078910758575245396369709495063070202433832221772728021708079141746515469950248160534726502810704256703088684677877258573049270790396920638239330550633086994873425126929073220720355594488969185367608970916707, 9716821256832823750824128939107476939193936880337072944057098552215636341970779759899504078211465219351423745606682464111980567519009576095570498485630378890832910178268396634042751260634975171396984879182577992189999471936271429379306815019808996603918680787757713732404409692378153404122817226376865296438358486825612038858671776168645459752591925049260849071890295705474681598072886213619765003334857584781191985867775067185431488903206792188339131394272348988190482038716689478427650052247117559254256426511237932521351563089652047479479797300938563071283204961821455011631287889953996753731046822530037290627603, 11666333796778950070167408874398723214755352342048420236509233384060504228691247439421717776145154660819665260614606719030374746157097188777077905502366283706404249089084254210184487000990590270597382395207166506919474285640547576022841376382228267993104083461046139626378377974880966684427584303435662417721364008851870996677773917720510662526494737368571401785448409850024786090719768664502422761048062510586525467980024015286711938702512216482448086269597385419099772350149085440682892594663347642016624766961661170116360402443166746640256191226904369488864228395770803375247648092252065676886829888128110190309444, 11462478619099457240194769131836026270676403653501558282234968840872201162571883741201212219688281503510052098158124641727050288323198630131726234941868641468115278637960576287497767164456374120707437312761564310114818371263585487215911621560151358932205369221540130826905285545384305252671441989503441136412038093124085709642767025279350701000689026612157516744318724863351212190331852873715100901776905551563639179863329686328110637392713048373928191537946089436183622931782516720136751294476526680955429995943935488708846823839471792834286557115607414856063416087088477870164924987940894347486987836314461869534685, 10653980645418567411513922726616332470333513058407903035252559634113729870896307952345894573596782737100406813700290955080352696027100830934620756512872071900141804524610003605512659517424571217583346011965481480902253618773638355461764615453623374981103761629025970935810383120788534231421966726189585137512500570267960570464567388134331962043004849033375701972321858826974571976630891280420154316273033822618993014775803644483310026324771611118893293874122154993194283048698946653630901390782848148154411901241076544121228997263925606737607053972716874433300890330943412885434902240474709761223385352589083032128765, 10333595582803945043794471549604060392892058436121718182876444277996436845270662996790111238164033031406294804268590041670028232929474601883136059254591114821360112812291665655800401763541770303414040301090112758998311872983916961222346986656419661796203670733971009015803316347392237554891453769853704667050186727532712938810529943794137758599829378190680080965770951235622571154549350843468969908612054253674618037317066245764371279129776346266283585071808588302272504846382220877158974560863342504477881966924796683784677005619901829479041024077089614741081459831955279053575767736159622130675063748407061992052183]
comm = (10564327899571559803556847534640695884330979746141728381165331691371976198263843416751526335144564535035858053981517608346244582495510435781708514545410097533789005704048949775023251844189682064338358890427739102350645579483449459063227298628580813444257846278172112872070476617876388978632815732351176279459891770448714218081580878962036244554120215500496692247248020278906488898449151646331624912262205484811525189621806737849258225367134474296238235621600330628737449413319226263301240126177028279222960781645584351180328940683511286708507993883536602761937997289906562917482293638052704507924397633424367496240964, 4387528105610677136382722097833805553385843892958316305467187670486199250717569327341072891778254838060236323831885558131143386943636641524724956236926177315970135623681789134933521529522559017273929375073606157451115549453689875510487618793700227395725601364775309166607448269494881759434610031015774783174435486283695473704010367742281324624499239551547535691273360430539739519609019906949849114055192830821910951442964212279996201740422429695430649919698399420612775831374301153008912976259171898412262142433496285240507322095993886385920265570293733256427242653393188675651145896591757150999795300092930798687689)
k = n - 11935450457829533235861673228297207102011152676397253867146913792126035709631838912054379483925100858088716543548565883127607546205725887108101118334914085611884304295616391635635730462010491550855190770776531821441961930152081076014630292188457483421965231052149991813167636622576040955869771100692060798499693960184446731314918105642113926187107833337161524510120603332593906360209185930338647472196619213478020597693556397507575990827712746479989636430658680762894157884135805985796209803194138514597265621623815104440785237530400299161579990533910282443770714101522282163174088074769666145653173062992665886703602
mm = pow((int(comm[0]) - pow(k,8,n) - pow(k,4,n) - pow(k,2,n)) % n,e2,n)
print(long_to_bytes(mm))
# flag{7c95453a-e577-40d8-9ad0-993655b83b69}

另一种解法
利用伴随矩阵
1. f 1 ( k ) ≡ ∑ i = 0 7 p o l y i k i − c 2   ( m o d     n ) 1. f_1(k) \equiv\sum_{i=0}^7poly_ik^i-c_2\mathrm{~(mod~}\mathrm{~}n) 1.f1(k)i=07polyikic2 (mod  n)
2. f 2 ≡ m d + k 8 + k 4 + k 2 − c 1 ( m o d n ) 2. f_2\equiv m^d + k^8 + k^4 + k^2 - c_1 \pmod n 2.f2md+k8+k4+k2c1(modn)
m d 次数太高,我们直接将其设为变量,于是有: 3. f 2 ( m d , k ) ≡ m d + k 8 + k 4 + k 2 − c 1 两式联立得到关于 m d 的多项式 h ,测试结果中得到的 h 的度是 7 故有 h ( m d ) = m d 7 + c o e 6 ∗ m d 6 + . . . + c o e 1 ∗ m d + c o e 0 又知道 m = ( m d ) e ,故我们把 h ( m d ) 中每项升个 e 次方,就能得到一个关于 m 的多项式 和 f ( m ) ≡ ( p a d ( m ) ) 233 − c   ( m o d   n ) 来个 G C D 便能得到 x − m m^d次数太高,我们直接将其设为变量,于是有:\\ 3. f_2(md,k) \equiv md + k^8 + k^4 + k^2 - c_1\\ 两式联立得到关于md的多项式h,测试结果中得到的h的度是7\\ 故有h(md) = md^7 + coe_6 * md^6 + ... + coe_1 * md + coe_0\\ 又知道m = (md)^e,故我们把h(md)中每项升个e次方,就能得到一个关于m的多项式\\ 和f(m)\equiv(pad(m))^{233}-c\mathrm{~(mod~}n)来个GCD便能得到x - m md次数太高,我们直接将其设为变量,于是有:3.f2(md,k)md+k8+k4+k2c1两式联立得到关于md的多项式h,测试结果中得到的h的度是7故有h(md)=md7+coe6md6+...+coe1md+coe0又知道m=(md)e,故我们把h(md)中每项升个e次方,就能得到一个关于m的多项式f(m)(pad(m))233c (mod n)来个GCD便能得到xm

如何实现?利用伴随矩阵 companion_matrix

我们求出当前多项式 h ( m d ) h(md) h(md)的伴随矩阵 C ( h ) C( h) C(h) C ( h ) C(h) C(h)的特征多项式就是 h ( m d ) h(md) h(md) C ( h ) C(h) C(h)的特征值就是 h ( m d ) h(md) h(md)的解,那么 m d m^d md就会是 C ( h ) C(h) C(h)的对角矩阵上的一个元素。
因此我们求一个 C ( h ) e C(h)^e C(h)e,那么其对角矩阵上的一个元素就会是 ( m d ) e ≡ m ( m o d n ) ( m^d) ^e\equiv m \pmod n (md)em(modn),也就意味着新特征多项式的一个解是 m m m

所以,我们只需要对 h ( m d ) h(md) h(md)的伴随矩阵求一个e次幂,再取其特征多项式即可得到m
he = (companion_matrix(h) ** e).charpoly()

from Crypto.Util.number import *
from tqdm import *

def GCD(g1, g2):
    while g2:
        g1, g2 = g2, g1 % g2
    return g1.monic()

e1 = 233
c1 = 7252592878713436249451954839264355322580930765631177572271016442117341039243270139159572914726052278102731751307948710556102124039673892501351580382026911586520822698910216934337820791611920030598567775355231131126300774119520299748279014958652077682887635170584723744587650744421280998057075011222009042174385778453331646210379693618543179886347307521772868295540264296894711602178922977038080083149136928926845871859677401680541048431032673765061924102033485570287098238695235990854284581798656185853973943961983020641995838344765211070928405487458023474992011192333056478388071341171355197120988215168198599723008
e2 = 66193637341723367163125702898112480448278699637268148343857725442855402823431
n = 11935450457829533235861673228297207102011152676397253867146913792126035709631838912054379483925100858088716543548565883127607546205725887108101118334914085611884304295616391635635730462010491550855190770776531821441961930152081076014630292188457483421965231052149991813167636622576040955869771100692060798499848216781403839908159869808167642603742236390452605002523104832413884128824863453874477895814675168541067154527938435375815931877307360825011810649184534014412683654903241610167115302439866360069493031086872354910005880773459207712493126679315455220650236256646891830311728264963649315399787003295334546874291
poly = [11717154796621555517773089565161800782497395722578959209529354534025874232277165805913450430518606899030436997688640019197332182511107284797218734095249300649807218465147399703372218739746124711200544753873488683088277396707752681278994522913785476758026448815685216381723435987067431688479748324396207672503845734170132747031467431651462218384749316037680784863900868165022343622041751554333022117572879116218759879246367088427084626950955537463817968031017275910364363695899152710198165120432170787171341528864286158526038651919017107408570791186937519694774479837991365808631767140379749029359380372242375950137980, 9123862087464108309368301961629788915272772896023134293061688494597654503820136260901587831268936385580664649067767056115754724046745958708702235170960467356062328703981921906752172049390790202666123073269199722768061043975957820847564911432200111405506704374689942732871658793810805164611038997319494337357970794059964303933995742679251310010710434981636137595085517852847956640902442517513717087059546226466932055404728069004610675179760781279470558117788079744090471741006843223391295194412058215189490450122125518118132532661928747925982914732441440478529947224247988342993141712946093256348898996486327422944643, 6030603763346983288102354051890376530618029881435881726123892326247756715375950846629522738204125453587401831309679161545839726580035304449416761250948280327548535169936710507270611945843758842074476358246176098954644815210291073632368712607495031631913377358289661882694855436741228045084898247782669601243425453739817361547681943880579046765521731792701727321918301930375236655162783436465648090046259078120078910758575245396369709495063070202433832221772728021708079141746515469950248160534726502810704256703088684677877258573049270790396920638239330550633086994873425126929073220720355594488969185367608970916707, 9716821256832823750824128939107476939193936880337072944057098552215636341970779759899504078211465219351423745606682464111980567519009576095570498485630378890832910178268396634042751260634975171396984879182577992189999471936271429379306815019808996603918680787757713732404409692378153404122817226376865296438358486825612038858671776168645459752591925049260849071890295705474681598072886213619765003334857584781191985867775067185431488903206792188339131394272348988190482038716689478427650052247117559254256426511237932521351563089652047479479797300938563071283204961821455011631287889953996753731046822530037290627603, 11666333796778950070167408874398723214755352342048420236509233384060504228691247439421717776145154660819665260614606719030374746157097188777077905502366283706404249089084254210184487000990590270597382395207166506919474285640547576022841376382228267993104083461046139626378377974880966684427584303435662417721364008851870996677773917720510662526494737368571401785448409850024786090719768664502422761048062510586525467980024015286711938702512216482448086269597385419099772350149085440682892594663347642016624766961661170116360402443166746640256191226904369488864228395770803375247648092252065676886829888128110190309444, 11462478619099457240194769131836026270676403653501558282234968840872201162571883741201212219688281503510052098158124641727050288323198630131726234941868641468115278637960576287497767164456374120707437312761564310114818371263585487215911621560151358932205369221540130826905285545384305252671441989503441136412038093124085709642767025279350701000689026612157516744318724863351212190331852873715100901776905551563639179863329686328110637392713048373928191537946089436183622931782516720136751294476526680955429995943935488708846823839471792834286557115607414856063416087088477870164924987940894347486987836314461869534685, 10653980645418567411513922726616332470333513058407903035252559634113729870896307952345894573596782737100406813700290955080352696027100830934620756512872071900141804524610003605512659517424571217583346011965481480902253618773638355461764615453623374981103761629025970935810383120788534231421966726189585137512500570267960570464567388134331962043004849033375701972321858826974571976630891280420154316273033822618993014775803644483310026324771611118893293874122154993194283048698946653630901390782848148154411901241076544121228997263925606737607053972716874433300890330943412885434902240474709761223385352589083032128765, 10333595582803945043794471549604060392892058436121718182876444277996436845270662996790111238164033031406294804268590041670028232929474601883136059254591114821360112812291665655800401763541770303414040301090112758998311872983916961222346986656419661796203670733971009015803316347392237554891453769853704667050186727532712938810529943794137758599829378190680080965770951235622571154549350843468969908612054253674618037317066245764371279129776346266283585071808588302272504846382220877158974560863342504477881966924796683784677005619901829479041024077089614741081459831955279053575767736159622130675063748407061992052183]
comm = (10564327899571559803556847534640695884330979746141728381165331691371976198263843416751526335144564535035858053981517608346244582495510435781708514545410097533789005704048949775023251844189682064338358890427739102350645579483449459063227298628580813444257846278172112872070476617876388978632815732351176279459891770448714218081580878962036244554120215500496692247248020278906488898449151646331624912262205484811525189621806737849258225367134474296238235621600330628737449413319226263301240126177028279222960781645584351180328940683511286708507993883536602761937997289906562917482293638052704507924397633424367496240964, 4387528105610677136382722097833805553385843892958316305467187670486199250717569327341072891778254838060236323831885558131143386943636641524724956236926177315970135623681789134933521529522559017273929375073606157451115549453689875510487618793700227395725601364775309166607448269494881759434610031015774783174435486283695473704010367742281324624499239551547535691273360430539739519609019906949849114055192830821910951442964212279996201740422429695430649919698399420612775831374301153008912976259171898412262142433496285240507322095993886385920265570293733256427242653393188675651145896591757150999795300092930798687689)

P = Zmod(n)["md,k"]
md, k = P.gens()
# 或者:
# P.<md, k> = PolynomialRing(Zmod(n))
# md, k = P.gens()

f = md + k**8 + k**4 + k**2 - comm[0]
g = sum([poly[i] * k**i for i in range(len(poly))]) - comm[1]
h = f.sylvester_matrix(g, k).det().univariate_polynomial().monic()
h_coefficients = h.coefficients()
# 里面f.sylvester_matrix(g, k) = g.sylvester_matrix(f, k)

final = (companion_matrix(h_coefficients) ** e2).charpoly() # md伴随矩阵e次幂的特征根

# padding部分爆破
for i in trange(1,255):
    f1 = ((x * 256 ^ (255 - i) + bytes_to_long(long_to_bytes(i) * (255 - i))) ^ e1 - c).univariate_polynomial() # 创建一元多项式
    mm = GCD(M, f1)
    print(mm)
    if mm not in ZZ:
        m = int(-mm.monic()[0])
        print(long_to_bytes(m))
        break 
# flag{7c95453a-e577-40d8-9ad0-993655b83b69}

[2024HZNUCTF 决赛] ezmath

题目描述:

from hashlib import md5
from Crypto.Util.number import *
from secret import flag,a,b,c

n = getPrime(512)

assert n == a**2 + b**2 * c**2

assert flag == "HZNUCTF{"+ md5(str(a+b+c).encode()).hexdigest() + "}"
# n =10025528183022843297972893037004274434565776775894832972425335533530501283241358450613164144702044922014938018419602889154405001125828093273180244377985061

题目分析:
我还在那推来着,结果是用库函数直接梭

from hashlib import md5
n =10025528183022843297972893037004274434565776775894832972425335533530501283241358450613164144702044922014938018419602889154405001125828093273180244377985061
a,b,c = three_squares(n) # 用于找到一个给定整数的三个平方数的和
flag = "HZNUCTF{"+ md5(str(a+b+c).encode()).hexdigest() + "}"
print(flag)
# HZNUCTF{55d1c6086bf65f7416ae547ca4adaaa0}

浅记一下
关键词:d高位攻击,d低位攻击,剪枝,伴随矩阵 companion_matrix,groebner_basis,sylvester_matrix,three_squares

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

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

相关文章

C++11:并发新纪元 —— 深入理解异步编程的力量(1)

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之《C11&#xff1a;并发新纪元 —— 深入理解异步编程的力量》&#xff0c;在这篇文章中&#xff0c;你将会学习到C新特性以及异步编程的好处&#xff0c;以及其如何带来的高性能的魅力&…

【学习笔记】HarmonyOS 4.0 鸿蒙Next 应用开发--安装开发环境

开发前的准备 首先先到官网去下载Devco Studio 这个开发工具&#xff0c;https://developer.harmonyos.com/cn/develop/deveco-studio/#download 提供了WIndows和Mac的开发环境&#xff0c;我自己是Windows的开发环境。 所以下载之后直接点击exe进行安装即可。 如果之前安装过…

nc生成临时凭证配置

nc生成临时凭证配置 要实现的功能&#xff1a; 审批时生成临时凭证弃审时删除临时凭证 前台配置 后台配置 BillReflectorServiceImpl.java package nc.pubimpl.jych.qtsq.voucher;import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; impo…

vue3专栏项目 -- 三、使用vue-router 和 vuex(下)

一、添加columnDetail 页面 首页有专栏列表&#xff08;ColumnList组件&#xff09;&#xff0c;专栏列表中有很多专栏&#xff0c;然后点击某个专栏就进入专栏详情页&#xff08;ColumnDetail组件&#xff09;&#xff0c;专栏详情页中有很多文章&#xff0c;点击某个文章就进…

【案例分享】校园服务小程序开发经验和主要功能,引领校园生活新方式

随着移动互联网的普及&#xff0c;学生们对于校园生活的需求也在不断增长。校园圈子、校园跑腿、校园外卖、校园服务等小程序等应用应运而生&#xff0c;为学生们提供了更加便捷、高效的生活方式。那么&#xff0c;如何开发一款能够满足学生需求的校园服务小程序呢&#xff1f;…

VTK官方示例

VTK官方示例 -vtk字體 #!/usr/bin/env python# noinspection PyUnresolvedReferences import vtkmodules.vtkInteractionStyle # noinspection PyUnresolvedReferences import vtkmodules.vtkRenderingFreeType # noinspection PyUnresolvedReferences import vtkmodules.vtk…

创新指南 |风险管理:企业如何应对颠覆性创新带来的挑战

在当今充满变数的商业时代&#xff0c;颠覆性创新是企业突破传统、引领市场的关键。然而&#xff0c;真正的创新之旅并不平坦&#xff0c;充满了挑战和不确定性。文章将快速引导读者了解颠覆性创新的定义、挑战、以及如何通过设计思维、市场洞察、利益相关者沟通和文化变革等关…

专业数字音频编码器 JR-AE401

简介 JR-AE401专业模拟&数字音频编码器采用最为先进的MPEG4 AAC音频压缩算法&#xff0c;在低网络带宽的严酷条件下也具备优异的音频还原性。支持多种音频编码标准&#xff0c;例如AAC-LC,AAC-HE,AAC-HEv2等。 为适应各种复杂的网络音频应用环境JR-AE401提供了丰富的流媒…

数据结构十三:八大排序算法

排序算法&#xff08;sorting algorithm&#xff09;是用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用&#xff0c;因为有序数据通常能够被更高效地查找、分析和处理。排序算法中的数据类型可以是整数、浮点数、字符或字符串等。排序的判断规则可根据需求设定&am…

串口属性中的BM延时计时器问题

如果使用程序修改则需要修改注册表对应位置如下 第一个示例&#xff08;217&#xff09; 第二个示例&#xff08;219&#xff09; 需要注意的事情是修改前必须点查看串口名称&#xff08;例如上图是com5&#xff09; 程序修改&#xff1a; 有没有办法以编程方式更改USB <…

算法设计与分析 例题解答 解空间与搜索

1.请画出用回溯法解n3的0-1背包问题的解空间树和当三个物品的重量为{20, 15, 10}&#xff0c;价值为{20, 30, 25}&#xff0c;背包容量为25时搜索空间树。 答&#xff1a; 解空间树&#xff1a; 搜索空间树&#xff1a; 2. 考虑用分支限界解0-1背包问题 给定n种物品和一背包…

每个初创企业创始人都应了解的搜索引擎优化基础知识

会话式AI引擎&#xff1a;如何革新您的业务通讯&#xff1f; 对于已经身兼数职的初创企业创始人来说&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;似乎是一项艰巨的任务。然而&#xff0c;在数字时代&#xff0c;它是推动流量、建立品牌知名度和实现长期成功不可或缺的…

2024年电工杯数学建模B题思路 中国电机工程学会杯建模思路分析

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

ASP.NET WebApi 如何使用 OAuth2.0 认证

前言 OAuth 2.0 是一种开放标准的授权框架&#xff0c;用于授权第三方应用程序访问受保护资源的流程。 OAuth 2.0 认证是指在这个框架下进行的身份验证和授权过程。 在 OAuth 2.0 认证中&#xff0c;涉及以下主要参与方&#xff1a; 资源所有者&#xff08;Resource Owner&…

Agisoft Metashape Pro for Mac/win:开启三维建模新视界

在当今数字化的时代&#xff0c;三维建模技术正发挥着越来越重要的作用。而 Agisoft Metashape Pro for Mac/win 无疑是该领域的一颗璀璨明星。 这款强大的三维建模软件为专业人士和爱好者提供了无与伦比的工具和功能。无论你是从事建筑设计、考古研究、影视特效制作还是地理信…

【nodejs 命令行交互神器 - inquirer.js】

需求 大家在开发时&#xff0c;有时需要从命令行读取用户的输入&#xff0c;或者让用户选择。在nodejs中&#xff0c;这个怎么实现? 原生实现 ❌ process.stdin.setEncoding(utf8);process.stdin.on(readable, () > {let chunk;// 使用循环确保我们读取所有的可用输入wh…

导电材料——分类、性能与性质

本篇为西安交通大学本科课程《电气材料基础》的笔记。 导电材料指的是能在电场下传导电流的材料。导体价电子所在能带为半满带&#xff0c;且相邻能级间隔小&#xff0c;外电场下电子很容易从低能级跃迁到高能级上&#xff0c;大量的电子很容易获得能量进行共有化运动&#xf…

winhex工具,将文件转换为16进制数据放入代码。

今天介绍winhex工具&#xff0c;可以将任何内容读取读取为16进制数据。下面看下效果。 下载链接&#xff1a; WinHex: Hex Editor & Disk Editor, Computer Forensics & Data Recovery Software 一、WinHex打开文件 我们要打开的文件&#xff1a; 打开后&#xff1a; 我…

QueryPerformanceCounter实现高精度uS(微妙)延时

参考连接 C# 利用Kernel32的QueryPerformanceCounter封装的 高精度定时器Timer_kernel32.dll queryperformancecounter-CSDN博客https://blog.csdn.net/wuyuander/article/details/111831973 特此记录 anlog 2024年5月11日

ubuntu系统在有无NVIDIA驱动下查看显卡型号

在ubuntu系统下&#xff0c;分别在有nvidia显卡驱动和无nvidia显卡驱动时&#xff0c;查看nvidia显卡型号。 1、有nvidia显卡驱动时的查看方式 nvidia-smi -L会显示如下信息&#xff1a; GPU 0: NVIDIA GEForce GTX 1660 SUPER (UUID: GPU-*****)2、无nvidia显卡驱动时的查看…