做题杂记666

[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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于fastapi sqladmin开发,实现可动态配置admin

1. 功能介绍&#xff1a; 1. 支持动态创建表、类&#xff0c;属性&#xff0c;唯一约束、外键&#xff0c;索引&#xff0c;关系&#xff0c;无需写代码&#xff0c;快速创建业务对象&#xff1b; 2. 支持配置admin显示参数&#xff0c;支持sqladmin原生参数设置&#xff0c;动…

2203-简单点-ultralytics库解析-data模块

data模块 overview布局\_\_init__.pyfrom .base import BaseDataset\_\_all__ annotator.pyaugment.pyclass BaseTransformclass Composeclass BaseMixTransformclass 未完继续 overview布局 从上往下解析 __init__.py from .base import BaseDataset __init__.py 文件在 Pyt…

nc生成临时凭证配置

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

二、jacoco代码覆盖率工具

jacoco代码覆盖率工具 一、jacoco介绍二、常见的java代码覆盖率工具三、为什么选择jacoco四、jacoco的特点五、Jacoco 支持的覆盖率指标六、那些暂未支持的覆盖率指标七、jacoco技术原理八、Jacoco 下载与配置九、jacoco主要文件十、jacoco使用流程十一、jacoco单元测试实战1、…

用友畅捷通T+ keyEdit sql注入漏洞

产品介绍 畅捷通 T 是一款灵动&#xff0c;智慧&#xff0c;时尚的基于互联网时代开发的管理软件&#xff0c;主要针对中小型工贸与商贸企业&#xff0c;尤其适合有异地多组织机构&#xff08;多工厂&#xff0c;多仓库&#xff0c;多办事处&#xff0c;多经销商&#xff09;的…

记录一次接口优化的过程。接口响应时间从500s下降到5s。

记录一次接口优化的过程。接口响应时间从500s下降到5s。 接口说明&#xff1a; 该接口通过用户导入的一年内每天的厂区用电功率数据来计算用户安装储能设备后的收益情况。 用电功率数据具体为每15分钟一条&#xff0c;一年约有 12*30*24*4 34560 条。 代码循环情况为&…

旅游系统小程序基于Uniapp+FastAdmin+ThinkPHP(源码搭建/上线/运营/售后/更新)

一款基于UniappFastAdminThinkPHP开发的旅游系统&#xff0c;包含消费者端&#xff08;手机端&#xff09;、机构工作人员&#xff08;手机端&#xff09;、机构端&#xff08;PC&#xff09;、平台管理端&#xff08;PC&#xff09;。机构可以发布旅游线路、景点项目&#xff…

ASP.NET一个简单的媒体播放器的设计与实现

摘 要 本论文所描述的播放器是在Microsoft Visual Studio .NET 2003平台下利用Visual Basic.NET语言完成的。使用Visual Basic.NET提供的Windows Media Player控件以及文件处理&#xff0c;最终实现一款别致的&#xff0c;贴近用户操作习惯的媒体播放器。 该播放器实现了对WAV…

excel表格里,可以把百分号放在数字前面吗?

在有些版本里是可以的&#xff0c;这样做&#xff1a; 选中数据&#xff0c;鼠标右键&#xff0c;点击设置单元格格式&#xff0c;切换到自定义&#xff0c;在右侧栏输入%0&#xff0c;点击确定就可以了。 这样设置的好处是&#xff0c;它仍旧是数值&#xff0c;并且数值大小没…

进程间通信(二)

共享内存 当进程A和进程B有一块共享的内存空间时&#xff0c;这两个进程之间的数据交互就会变的很简单&#xff0c;只需要像读取自己内存空间中的元素一样去读取数据即可。实现共享内存进行数据交互的一般步骤&#xff1a; 创建/打开共享内存内存映射数据交换断开与共享内存的…

icap对flash的在线升级

文章目录 一、icap原语介绍&#xff08;针对 S6 系列的 ICap&#xff09;&#xff0c;之后可以拓展到A7、K7当中去二、程序1设计2.1信号结构框图2.2 icap_delay设计2.3 icap_ctrl设计&#xff08;可以当模板使用&#xff0c;之后修改关键参数即可&#xff09; 三、程序2设计四、…

C++中调用python函数(VS2017+WIN10+Anaconda虚拟环境)

1.利用VS创建C空项目 step1 文件——新建——项目 step2 Visual C—— Windows桌面——Windows桌面向导 step3 选择空项目 step4 源文件——新建项——添加 step5 Visual C——C文件&#xff08;.cpp&#xff09; 2.配置环境 Step1. 更换成Release与X64 Step2. 打开项目属性&…

巨坑啊! before-upload返回false 会执行on-remove

通过对on-remove对应参数的打印&#xff0c;发现回调中的file参数有个status&#xff0c;若是是在before-upload中就被过滤了&#xff0c;就是ready&#xff0c;若是已经上传成功了去点击删除&#xff0c;status是success&#xff0c;就他了。 onRemove(file,fileList){if(file…

探索Linux:深入理解各种指令与用法

文章目录 cp指令mv指令cat指令more指令less指令head指令tail指令与时间相关的指令date指令 cal指令find指令grep指令zip/unzip指令总结 上一个Linux文章我们介绍了大部分指令&#xff0c;这节我们将继续介绍Linux的指令和用法。 cp指令 功能&#xff1a;复制文件或者目录 语法…

在 Python 的哪个版本之后,字典的添加顺序与键的顺序是一致的?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 在 Python 的不同版本中&#xff0c;字典&#xff08;dict&#xff09;类型的行为发生了显著变化。在 Python 3.6 及之前的版本中&#xff0c;字典是无序的&#xff0c;这意味着字典在遍历时不能保证按…

图鸟模板-官网:基于Vue 3的前端开发新篇章

一、引言 随着前端技术的飞速发展&#xff0c;企业对于官网的需求也从简单的展示型网站向功能丰富、交互体验良好的方向转变。在这样的背景下&#xff0c;图鸟模板-官网以其基于Vue 3的纯前端开发特性&#xff0c;以及支持微信小程序、支付宝小程序、APP和H5的跨平台能力&…

【.NET Core】你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟

你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟 文章目录 你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟一、概述二、CallerMemberNameAttribute类三、CallerFilePathAttribute 类四、CallerLineNumberAttribute 类…

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

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

Golang编译优化——稀疏条件常量传播

文章目录 一、概述二、稀疏条件常量传播2.1 初始化worklist2.2 构建def-use链2.3 更新值的lattice2.4 传播constant值2.5 替换no-constant值 一、概述 常量传播&#xff08;constant propagation&#xff09;是一种转换&#xff0c;对于给定的关于某个变量 x x x和一个常量 c …

c++ 归并排序

归并排序是一种遵循分而治之方法的排序算法。它的工作原理是递归地将输入数组划分为较小的子数组并对这些子数组进行排序&#xff0c;然后将它们合并在一起以获得排序后的数组。 简单来说&#xff0c;归并排序的过程就是将数组分成两半&#xff0c;对每一半进行排序&#xff0c…