[CISCN 2024] Crypto部分復現

文章目錄

    • OvO
    • ez_rsa
    • checkin
    • 淺記一下

遲來的文章

OvO

題目描述:

from Crypto.Util.number import *
from secret import flagnbits = 512
p = getPrime(nbits)
q = getPrime(nbits)
n = p * q
phi = (p-1) * (q-1)
while True:kk = getPrime(128)rr = kk + 2e = 65537 + kk * p + rr * ((p+1) * (q+1)) + 1if gcd(e, phi) == 1:break
m = bytes_to_long(flag)
c = pow(m, e, n)e = e >> 200 << 200
print(f'n = {n}')
print(f'e = {e}')
print(f'c = {c}')"""
n = 111922722351752356094117957341697336848130397712588425954225300832977768690114834703654895285440684751636198779555891692340301590396539921700125219784729325979197290342352480495970455903120265334661588516182848933843212275742914269686197484648288073599387074325226321407600351615258973610780463417788580083967
e = 37059679294843322451875129178470872595128216054082068877693632035071251762179299783152435312052608685562859680569924924133175684413544051218945466380415013172416093939670064185752780945383069447693745538721548393982857225386614608359109463927663728739248286686902750649766277564516226052064304547032760477638585302695605907950461140971727150383104
c = 14999622534973796113769052025256345914577762432817016713135991450161695032250733213228587506601968633155119211807176051329626895125610484405486794783282214597165875393081405999090879096563311452831794796859427268724737377560053552626220191435015101496941337770496898383092414492348672126813183368337602023823
"""

題目分析:
e = 65537 + k p + ( k + 2 ) ( p + 1 ) ( q + 1 ) + 1 e = ( k + 2 ) n + ( 2 k + 2 ) p + ( k + 2 ) q + ( k + 65540 ) ? k + 2 = e / / n , k = e / / n ? 2 令 e 中已知的項都為 a ,即 a = ( k + 2 ) n + k + 65540 e = ( 2 k + 2 ) p + ( k + 2 ) q + a e p = ( 2 k + 2 ) p 2 + ( k + 2 ) n + a p 目前是 e 的低 200 位未知,等式又已知 那么具體解法可以參考 d 的高位攻擊,很快便能出結果的 e = 65537 + kp + (k + 2)(p + 1)(q + 1) + 1\\e = (k + 2)n + (2k + 2)p + (k + 2)q + (k + 65540)\\ \Rightarrow k + 2 = e // n,k = e // n - 2\\ 令e中已知的項都為a,即a = (k + 2)n + k + 65540\\e = (2k + 2)p + (k + 2)q + a\\e p = (2k + 2)p^2 + (k + 2)n + ap\\目前是e的低200位未知,等式又已知\\ 那么具體解法可以參考d的高位攻擊,很快便能出結果的 e=65537+kp+(k+2)(p+1)(q+1)+1e=(k+2)n+(2k+2)p+(k+2)q+(k+65540)?k+2=e//nk=e//n?2e中已知的項都為a,即a=(k+2)n+k+65540e=(2k+2)p+(k+2)q+aep=(2k+2)p2+(k+2)n+ap目前是e的低200位未知,等式又已知那么具體解法可以參考d的高位攻擊,很快便能出結果的
exp:

# sagemath
from Crypto.Util.number import *def get_full_p(p_high, n, bits):PR.<x> = PolynomialRing(Zmod(n))    f = x + p_highf = f.monic()roots = f.small_roots(X=2^(bits + 10), beta=0.4)  if roots:x0 = roots[0]p = gcd(x0 + p_high, n)return ZZ(p)n = 111922722351752356094117957341697336848130397712588425954225300832977768690114834703654895285440684751636198779555891692340301590396539921700125219784729325979197290342352480495970455903120265334661588516182848933843212275742914269686197484648288073599387074325226321407600351615258973610780463417788580083967
e = 37059679294843322451875129178470872595128216054082068877693632035071251762179299783152435312052608685562859680569924924133175684413544051218945466380415013172416093939670064185752780945383069447693745538721548393982857225386614608359109463927663728739248286686902750649766277564516226052064304547032760477638585302695605907950461140971727150383104
c = 14999622534973796113769052025256345914577762432817016713135991450161695032250733213228587506601968633155119211807176051329626895125610484405486794783282214597165875393081405999090879096563311452831794796859427268724737377560053552626220191435015101496941337770496898383092414492348672126813183368337602023823k = e // n - 2
a = 65537 + (k + 2) * n + (k + 2) + 1
P.<x> = PolynomialRing(RealField(1024))
f = e * x - ((2 * k + 2) * x ^ 2 + (k + 2) * n + a * x)
res = f.roots()if res:for y in res:p_high = int(y[0])p = get_full_p(p_high, n, 200)if p:print(p)   # python
from Crypto.Util.number import *
n = 111922722351752356094117957341697336848130397712588425954225300832977768690114834703654895285440684751636198779555891692340301590396539921700125219784729325979197290342352480495970455903120265334661588516182848933843212275742914269686197484648288073599387074325226321407600351615258973610780463417788580083967
e = 37059679294843322451875129178470872595128216054082068877693632035071251762179299783152435312052608685562859680569924924133175684413544051218945466380415013172416093939670064185752780945383069447693745538721548393982857225386614608359109463927663728739248286686902750649766277564516226052064304547032760477638585302695605907950461140971727150383104
c = 14999622534973796113769052025256345914577762432817016713135991450161695032250733213228587506601968633155119211807176051329626895125610484405486794783282214597165875393081405999090879096563311452831794796859427268724737377560053552626220191435015101496941337770496898383092414492348672126813183368337602023823
k = e // n - 2
p = 9915449532466780441980882114644132757469503045317741049786571327753160105973102603393585703801838713884852201325856459312958617061522496169870935934745091
q = n // p
print(n % p)
e = 65537 + k * p + (k + 2) * ((p+1) * (q+1)) + 1
phi = (p - 1) * (q - 1)
d = inverse(e,phi)
print(long_to_bytes(pow(c,d,n)))

ez_rsa

題目描述:
ezrsa.py:

from Crypto.Util.number import *
from Crypto.PublicKey import RSA
import random
from secret import flagm = bytes_to_long(flag)
key = RSA.generate(1000)
passphrase = str(random.randint(0,999999)).zfill(6).encode()
output = key.export_key(passphrase=passphrase).split(b'\n')
for i in range(7, 15):output[i] = b'*' * 64
with open("priv.pem", 'wb') as f:for line in output:f.write(line + b'\n')
with open("enc.txt", 'w') as f:f.write(str(key._encrypt(m)))

enc.txt:

55149764057291700808946379593274733093556529902852874590948688362865310469901900909075397929997623185589518643636792828743516623112272635512151466304164301360740002369759704802706396320622342771513106879732891498365431042081036698760861996177532930798842690295051476263556258192509634233232717503575429327989

priv.pem:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,435BF84C562FE7939phAgeyjnJYZ6lgLYflgduBQjdX+V/Ph/fO8QB2ZubhBVOFJMHbwHbtgBaN3eGlh
WiEFEdQWoOFvpip0whr4r7aGOhavWhIfRjiqfQVcKZx4/f02W4pcWVYo9/p3otdD
ig+kofIR9Ky8o9vQk7H1eESNMdq3PPmvd7KTE98ZPqtIIrjbSsJ9XRL+gr5a91gH
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
hQds7ZdA9yv+yKUYv2e4de8RxX356wYq7r8paBHPXisOkGIVEBYNviMSIbgelkSI
jLQka+ZmC2YOgY/DgGJ82JmFG8mmYCcSooGL4ytVUY9dZa1khfhceg==
-----END RSA PRIVATE KEY-----

題目分析:
第一部分先略過吧,不想看
直接跳到后面階段
得到的數據有:

n = 0x00a18f011bebacceda1c6812730b9e62720d3cbd6857af2cf8431860f5dc83c5520f242f3be7c9e96d7f96b41898ff000fdb7e43ef6f1e717b2b7900f35660a21d1b16b51849be97a0b0f7cbcf5cfe0f00370cce6193fefa1fed97b37bd367a673565162ce17b0225708c032961d175bbc2c829bf2e16eabc7e0881feca0975c81
e = 0x10001
inv = 0x5f152c429871a7acdd28be1b643b4652800b88a3d23cc57477d75dd5555b635167616ef5c609d69ce3c2aedcb03b62f929bbcd891cadc0ba031ae6fec8a2116d
dqlow = 0x8f2363b340e5

看這里之前我覺得可以先來看看下面這題

checkin

題目描述:

from Crypto.Util.number import *
from secret import flagp = getPrime(512)
q = getPrime(512)
n = p*q
x = 2021*p+1120*q
h = (inverse(x,n)+x)%n
e = 65537
c = pow(bytes_to_long(flag), e, n)print('n =', n)
print('c =', c)
print('h =', h)
print('p0 =', p >> 490)# n = 124592923216765837982528839202733339713655242872717311800329884147642320435241014134533341888832955643881019336863843062120984698416851559736918389766033534214383285754683751490292848191235308958825702189602212123282858416891155764271492033289942894367802529296453904254165606918649570613530838932164490341793
# c = 119279592136391518960778700178474826421062018379899342254406783670889432182616590099071219538938202395671695005539485982613862823970622126945808954842683496637377151180225469409261800869161467402364879561554585345399947589618235872378329510108345004513054262809629917083343715270605155751457391599728436117833
# h = 115812446451372389307840774747986196103012628652193338630796109042038320397499948364970459686079508388755154855414919871257982157430015224489195284512204803276307238226421244647463550637321174259849701618681565567468929295822889537962306471780258801529979716298619553323655541002084406217484482271693997457806
# p0 = 4055618

題目分析:
已知:
x = 2021 p + 1120 q h ≡ x + 1 x ( m o d n ) p 0 = p 的高 22 位 目前知道了 n , c , h , p 0 \begin{align*} & x = 2021p + 1120q\\ & h \equiv x + \frac{1}{x} \pmod n\\ & p0 = p的高22位\\ & 目前知道了n,c,h,p0\\ \end{align*}\\ ?x=2021p+1120qhx+x1?(modn)p0=p的高22目前知道了n,c,h,p0?
= > x 2 + 1 ? h x ≡ 0 ( m o d n ) ① 借助 p 0 計算出 x 的一個近似估計 x 0 x 0 = 2021 ? ( p 0 < < 490 ) + 1120 ? ( N p 0 < < 490 ) x 和 x 0 之間的誤差 x _ d i f f 最多是 501 位,大概 500 位左右的樣子 所以我們將 x _ d i f f 當作一個新的未知量通過①式來構造等式,之后使用 c o p p e r 求出 f ( x _ d i f f ) = ( x 0 + x _ d i f f ) 2 + 1 ? h ? ( x 0 + x _ d i f f ) => x^2 + 1 - hx \equiv 0 \pmod n ①\\ 借助p0計算出x的一個近似估計x0\\ x0= 2021 * (p_0 << 490) + 1120 * (\frac{N}{p_0 << 490})\\ x和x0之間的誤差x\_diff最多是501位,大概500位左右的樣子\\ 所以我們將x\_diff當作一個新的未知量通過①式來構造等式,之后使用copper求出\\ f(x\_diff) = (x0 + x\_diff) ^ 2 + 1 - h * (x0 + x\_diff) =>x2+1?hx0(modn)借助p0計算出x的一個近似估計x0x0=2021?(p0?<<490)+1120?(p0?<<490N?)xx0之間的誤差x_diff最多是501位,大概500位左右的樣子所以我們將x_diff當作一個新的未知量通過式來構造等式,之后使用copper求出f(x_diff)=(x0+x_diff)2+1?h?(x0+x_diff)

現在的重點是small_roots()里面的參數要怎么設置
先來點前置知識(怕自己又忘了):

在這里插入圖片描述
X:所求根的上界

beta ( β ) (\beta) (β):限定因子,滿足 b > = N β b >= N^{\beta} b>=Nβ,默認值為1 (所以此情況下b = N)。 (找到 f(x)
= 0 的一個解,使它在模 n 的某個因子時成立,此時這里說的某個因子即為b,在rsa中n = p * q,只有兩個因子,故此時的b即p或q。一般我們遇到的題中p,q位數都是相等的,故beta可取0.5,但更多情況下我們并不知道p,q哪個大,所以保險起見beta通常取0.4)

epsilon ( ? ) (\epsilon) (?):限定因子,默認值為 β / 8 \beta / 8 β/8

d:f(x)的度,高位攻擊中d = 1

在方程F(x),模數N確認的情況下,我們可以通過增加 β \beta β 的取值或減小 ? \epsilon ? 的取值,使得X取到更優的上界。

我們知道上界 X = c e i l ( 1 2 ? N β 2 d ? ? ) X = ceil(\frac{1}{2} * N^{\frac{\beta^2}{d} - \epsilon}) X=ceil(21??Ndβ2???) (向上取整)
現在,已知d = 2,beta = 1,X有500位未知,我們取epsilon = 0.01是完成能夠得到結果的,但我們也知道epsilon越小,耗時越長,我們試著把epsilon調大一點,讓epsilon = 0.02,看看能否出結果。經過測試也是能出結果的,那么就用它啦
把x_diff求出來了,后面就簡單了,這也就不多說了

from Crypto.Util.number import long_to_bytesN = 124592923216765837982528839202733339713655242872717311800329884147642320435241014134533341888832955643881019336863843062120984698416851559736918389766033534214383285754683751490292848191235308958825702189602212123282858416891155764271492033289942894367802529296453904254165606918649570613530838932164490341793
c = 119279592136391518960778700178474826421062018379899342254406783670889432182616590099071219538938202395671695005539485982613862823970622126945808954842683496637377151180225469409261800869161467402364879561554585345399947589618235872378329510108345004513054262809629917083343715270605155751457391599728436117833
h = 115812446451372389307840774747986196103012628652193338630796109042038320397499948364970459686079508388755154855414919871257982157430015224489195284512204803276307238226421244647463550637321174259849701618681565567468929295822889537962306471780258801529979716298619553323655541002084406217484482271693997457806
p0 = 4055618p_high = p0 << 490
x0 = 2021 * p_high + 1120 * (N // p_high)P.<x_diff> = PolynomialRing(Zmod(N))
f = (x0 + x_diff)^2 + 1 - h * (x0 + x_diff)res = f.small_roots(X = 2^500, epsilon = 0.02)
x_diff = Integer(res[0])x = x0 + x_diffp = var('p')
q = var('q')
res = solve([x == 2021 * p + 1120 * q, N == p * q], p, q)
print(res)
p = Integer(res[0][0].rhs()) # 提取等號右邊部分
q = Integer(res[0][1].rhs())d = inverse_mod(65537, (p - 1) * (q - 1))
print(long_to_bytes(int(pow(c,d,N))))

進入主題
國賽ez_rsa
題目描述:
(就截取這么一點點了)

n = 0x00a18f011bebacceda1c6812730b9e62720d3cbd6857af2cf8431860f5dc83c5520f242f3be7c9e96d7f96b41898ff000fdb7e43ef6f1e717b2b7900f35660a21d1b16b51849be97a0b0f7cbcf5cfe0f00370cce6193fefa1fed97b37bd367a673565162ce17b0225708c032961d175bbc2c829bf2e16eabc7e0881feca0975c81
e = 65537
inv = 0x5f152c429871a7acdd28be1b643b4652800b88a3d23cc57477d75dd5555b635167616ef5c609d69ce3c2aedcb03b62f929bbcd891cadc0ba031ae6fec8a2116d
dqlow = 0x8f2363b340e5

題目分析:

方式1
d q ≡ d ( m o d q ? 1 ) d q ? e ≡ d ? e ≡ 1 ( m o d q ? 1 ) d q ? e ? 1 = k ? ( q ? 1 ) d q ? e + k ? 1 = k q 我們目前已知的有 d q 的低 48 位和 i n v (其中 i n v ? q ≡ 1 ( m o d p ) ) 又知道 : i n v ? q ? 1 = k 1 ? p 想的是乘個 q ,得到: i n v ? q ? q ? q = k 1 ? n 然后 i n v ? q 2 ? q ≡ 0 ( m o d n ) ,之后解方程 不過后面發現運行不出結果 被指出了問題:只有 k q ,并沒有 q ,確實,是我分析沒有到位 所以換一個: i n v ? k q ≡ k ( m o d p ) i n v ? k q ? k = k 2 ? p i n v ? ( k q ) 2 ? k ? k q = k ? k 2 ? n ≡ 0 ( m o d n ) 令 f = i n v ? ( k q ) 2 ? k ? k q 之后去解方程 \begin{align*} & dq \equiv d \pmod{q - 1} \\ & dq \cdot e \equiv d \cdot e \equiv 1 \pmod{q - 1} \\ & dq \cdot e - 1 = k \cdot (q - 1) \\ & dq \cdot e + k - 1 = kq \\ & 我們目前已知的有dq的低48位和inv(其中inv \cdot q \equiv1 \pmod p)\\ & 又知道:\\ & inv \cdot q - 1 = k_1 \cdot p\\ & 想的是乘個q,得到:inv\cdot q\cdot q - q = k_1 \cdot n\\ & 然后inv \cdot q^2 - q \equiv 0 \pmod n,之后解方程\\ & 不過后面發現運行不出結果\\ & 被指出了問題:只有kq,并沒有q,確實,是我分析沒有到位\\ & 所以換一個:\\ & inv \cdot kq \equiv k \pmod p\\ & inv \cdot kq - k = k_2 \cdot p\\ & inv \cdot (kq)^2 - k \cdot kq = k \cdot k_2\cdot n \equiv 0 \pmod n\\ & 令f = inv \cdot (kq)^2 - k \cdot kq \ 之后去解方程 \end{align*} ?dqd(modq?1)dq?ed?e1(modq?1)dq?e?1=k?(q?1)dq?e+k?1=kq我們目前已知的有dq的低48位和inv(其中inv?q1(modp)又知道:inv?q?1=k1??p想的是乘個q,得到:inv?q?q?q=k1??n然后inv?q2?q0(modn),之后解方程不過后面發現運行不出結果被指出了問題:只有kq,并沒有q,確實,是我分析沒有到位所以換一個:inv?kqk(modp)inv?kq?k=k2??pinv?(kq)2?k?kq=k?k2??n0(modn)f=inv?(kq)2?k?kq?之后去解方程?
解方程的過程和上題的思路應該來說是一樣的
這里也是d = 2,beta = 1,所以關鍵部分還是落在了epsilon 的取值上,這個就自己去生成數據測一測,從0.05往上加,發現到0.09以后解集為空,那么設置成0.09就行

exp:

from Crypto.Util.number import *
from tqdm import *n = 0x00a18f011bebacceda1c6812730b9e62720d3cbd6857af2cf8431860f5dc83c5520f242f3be7c9e96d7f96b41898ff000fdb7e43ef6f1e717b2b7900f35660a21d1b16b51849be97a0b0f7cbcf5cfe0f00370cce6193fefa1fed97b37bd367a673565162ce17b0225708c032961d175bbc2c829bf2e16eabc7e0881feca0975c81
e = 0x010001
dqlow = 0x8f2363b340e5
inv = 0x5f152c429871a7acdd28be1b643b4652800b88a3d23cc57477d75dd5555b635167616ef5c609d69ce3c2aedcb03b62f929bbcd891cadc0ba031ae6fec8a2116d
c = 55149764057291700808946379593274733093556529902852874590948688362865310469901900909075397929997623185589518643636792828743516623112272635512151466304164301360740002369759704802706396320622342771513106879732891498365431042081036698760861996177532930798842690295051476263556258192509634233232717503575429327989
bits = 48PR.<x> = PolynomialRing(Zmod(n))
dq = (2 ^ bits * x) + dqlow
# k = 47794
for k in trange(e,1,-1):f = inv * (e * (2 ^ bits * x + dqlow) - 1 + k) ^ 2 - k * (e * (2 ^ T * x + dqlow) - 1 + k)f = f.monic()root = f.small_roots(X=2 ^ (512 - bits), epsilon = 0.09)if root:dq = int(root[0]) * 2 ** bits + dqlowq = int((e * dq - 1) // k + 1)p = int(n // q)phi = (p - 1) * (q - 1)d = inverse_mod(e,phi)print(long_to_bytes(int(pow(c,d,n))))break

方式2
回到解法1里面說的那句" 想的是乘個 q ,得到: i n v ? q ? q ? q = k 1 ? n ≡ 0 ( m o d n ) 想的是乘個q,得到:inv\cdot q\cdot q - q = k_1 \cdot n \equiv 0 \pmod n 想的是乘個q,得到:inv?q?q?q=k1??n0(modn)"
既然如此,那我們就來求q,我們知道了dq的低48位,那么我們可以通過 d q ? e + k ? 1 = k q dq \cdot e + k - 1 = kq dq?e+k?1=kq 該式子求得q的低48位
之后令 f = i n v ? ( 2 b i t s ? x + q _ l o w ) 2 ? ( 2 b i t s ? x + q _ l o w ) f = inv * (2 ^{bits} * x + q\_low) ^ 2 - (2 ^{bits} * x + q\_low) f=inv?(2bits?x+q_low)2?(2bits?x+q_low)
解方程后即可得到flag

是的這里的epsilon最大也是0.09

from tqdm import *
from Crypto.Util.number import *
n = 0x00a18f011bebacceda1c6812730b9e62720d3cbd6857af2cf8431860f5dc83c5520f242f3be7c9e96d7f96b41898ff000fdb7e43ef6f1e717b2b7900f35660a21d1b16b51849be97a0b0f7cbcf5cfe0f00370cce6193fefa1fed97b37bd367a673565162ce17b0225708c032961d175bbc2c829bf2e16eabc7e0881feca0975c81
inv = 0x5f152c429871a7acdd28be1b643b4652800b88a3d23cc57477d75dd5555b635167616ef5c609d69ce3c2aedcb03b62f929bbcd891cadc0ba031ae6fec8a2116d
c = 55149764057291700808946379593274733093556529902852874590948688362865310469901900909075397929997623185589518643636792828743516623112272635512151466304164301360740002369759704802706396320622342771513106879732891498365431042081036698760861996177532930798842690295051476263556258192509634233232717503575429327989
dq_low = 0x8f2363b340e5
q_low = []
bits = 48
e = 65537
qq = var('qq')PR.<x> = PolynomialRing(Zmod(n))
# k = 47794
for k in trange(e,1,-1):k = 47794q0 = solve_mod([e * dq_low == k * qq - k + 1], 2^bits)for i in q0:f = inv * (2 ^ bits * x + int(i[0])) ^ 2 - (2 ^ bits * x + int(i[0]))f = f.monic()root = f.small_roots(X = 2^(512-bits), epsilon = 0.09)if root:q = 2^bits * int(root[0]) + int(i[0])p = n // qd = inverse_mod(e,(p - 1) * (q - 1))print(long_to_bytes(int(pow(c,d,n))))break# flag{df4a4054-23eb-4ba4-be5e-15b247d7b819}

這種方式更費時(不過多開幾個在比賽過程中也是能出的)開始確實是這種想法來著,后面beta又寫了個0.4,導致最終沒出結果,該死啊。
應該就是這個原因,導致又對它重溫了一遍。
現在應該可以這樣說,之前對coppersmith的理解是1/3,這次之后變成了2/3
所以說 數據測試真的是很重要啊!

淺記一下

OvO這題,有人問為什么不能用ZZ,要用RealField
細想一下就是用ZZ無解,為什么會無解,因為它的解是小數,而不是整數,故不能用ZZ。
RealField(1000)創建一個精度為1000位的實數環,即 可以得到小數點后1000位精確值,之后的可以舍棄,比如 如果得到的解是無理數,那么用它可以得到一個確切的值,而不是一個無限長小數

其他題,等以后有空再來吧

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16066.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16066.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16066.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【三維修復、分割與編輯】InFusion、Bootstrap 3D、GaussianGrouping、GaussianEditor等(論文總結)

提示&#xff1a; 文章目錄 前言一、InFusion&#xff1a;擴散模型助力&#xff0c;效率提高20倍&#xff01;(2024)1. 摘要2. 算法3. 效果 二、2D Gaussian Splatting三、Bootstrap 3D:從擴散模型引導三維重建1.摘要2.相關工作3.方法1.Boostrapping by Diffusion 通過擴散模型…

學習存儲協議的利器,聊聊tcpdump和Wireshark

數據存儲技術分為多個方面,包括數據持久化、數據映射、數據壓縮和通信協議等等。其中通信協議是數據存儲技術中非常重要的一部分,正是通信協議使得計算節點可以訪問存儲設備。同時,也正是不同的協議讓存儲系統呈現不同的形態。 如下圖所示,通過iSCSI協議,可以將存儲端的存…

使用std::vector<char>作為數據緩沖區分析

文章目錄 0. 引言1. 內存分配分析2. 性能影響3. 性能優化策略4. 實際性能測試5. 優化建議6. 總結額外建議 0. 引言 在 C 網絡編程中&#xff0c;std::vector<char> 常被用作數據緩沖區。與普通數組相比&#xff0c;std::vector 的內存分配在堆上&#xff0c;而非棧上&am…

【JVM實踐與應用】

JVM實踐與應用 1.類加載器(加載、連接、初始化)1.1 類加載要完成的功能1.2 加載類的方式1.3 類加載器1.4 雙親委派模型1.5自定義ClassLoader1.6 破壞雙親委派模型2.1 類連接主要驗證內容2.2 類連接中的解析2.3 類的初始化3.1 類的初始化時機3.2 類的初始化機制和順序3.2 類的卸…

C從零開始實現貪吃蛇大作戰

個人主頁&#xff1a;星紜-CSDN博客 系列文章專欄 : C語言 踏上取經路&#xff0c;比抵達靈山更重要&#xff01;一起努力一起進步&#xff01; 有關Win32API的知識點在上一篇文章&#xff1a; 目錄 一.地圖 1.控制臺基本介紹 2.寬字符 1.本地化 2.類項 3.setlocale函…

解釋Vue中transition的理解

在Vue中&#xff0c;transition組件用于在元素或組件插入、更新或移除時應用過渡效果。Vue 2和Vue 3都提供了transition組件&#xff0c;但兩者之間有一些差異和更新。以下是關于Vue 2和Vue 3中transition組件的理解&#xff1a; Vue 2中的transition 在Vue 2中&#xff0c;t…

Golang 如何使用 gorm 存取帶有 emoji 表情的數據

Golang 如何使用 gorm 存取帶有 emoji 表情的數據 結論&#xff1a;在 mysql 中盡量使用 utf8mb4&#xff0c;不要使用 utf8。db報錯信息&#xff1a;Error 1366 (HY000): Incorrect string value: \\xE6\\x8C\\xA5\\xE7\\xAC\\xA6...根本原因&#xff1a;emoji 4個字節&#x…

MybatisPlus分頁查詢

分頁查詢controller寫法 public PageResult findByList(RequestBody UserDTO userDTO) {// 分頁IPage<User> page new Page(UserDTO.getPageNumber(), UserDTO.getPageSize());// 條件構造器QueryWrapper queryWrapper new QueryWrapper();queryWrapper.eq("user…

【深度學習】第1章

概論: 機器學習是對研究問題進行模型假設,利用計算機從訓練數據中學習得到模型參數,并最終對數據進行預測和分析,其基礎主要是歸納和統計。 深度學習是一種實現機器學習的技術,是機器學習重要的分支。其源于人工神經網絡的研究。深度學習的模型結構是一種含多隱層的神經…

Springboot應用的配置管理

Spring Boot應用的配置管理 在本文中&#xff0c;我們將深入探討Spring Boot的配置文件&#xff08;application.properties/yaml&#xff09;&#xff0c;以及如何在不同環境中管理配置和使用Spring Config Server。此外&#xff0c;我們還將分享一些高級配置技巧&#xff0c…

Spring Cloud Alibaba 架構-Sentinel整合nacos和gateway

官網地址 sentinel官網: https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5 sentinel 下載地址: https://github.com/alibaba/Sentinel/releases nacos官網: https://nacos.io/zh-cn/docs/deployment.html nacos下載地址: https://github.com/alibaba/nacos/releas…

Shopee單個商品詳情采集

Shopee商品詳情頁數據采集實戰 作為東南亞地區最大的電商平臺之一,Shopee擁有超過3億活躍用戶。對于跨境電商企業、市場分析師等角色而言,從Shopee獲取商品數據是非常有價值的。本文將介紹如何使用Python程序采集Shopee單個商品詳情頁數據。 1. 確定采集目標和技術方案 確定…

路由傳參和獲取參數的三種方式

路由傳參和獲取參數在前端開發中是一個常見的需求&#xff0c;特別是在使用如 Vue.js、React 等前端框架時。下面&#xff0c;我將以 Vue.js 為例&#xff0c;介紹三種常見的路由傳參和獲取參數的方式&#xff1a; 1. 使用 params 傳參 傳參&#xff1a; 在路由配置中&#…

SQL Server 2022 STRING_SPLIT表值函數特性增強

SQL Server 2022 STRING_SPLIT表值函數特性增強 1、本文內容 List item語法參數返回類型注解 適用于&#xff1a;SQL Server 2016 (13.x) 及更高版本Azure SQL 數據庫Azure SQL 托管實例Azure Synapse AnalyticsMicrosoft Fabric 中的 SQL 分析終結點Microsoft Fabric 中的倉…

golang內置包strings和bytes中的Map函數的理解和使用示例

在go的標志內置包strings和bytes中都有一個函數Map, 這個函數的作用是&#xff1a; 將輸入字符串/字節切片中的每個字符使用函數處理后映射后返回一份字符串/字節切片的副本&#xff0c;如果函數中的某個字符返回負數則刪除對應的字符。 作用很簡單&#xff0c;當時對于新手來…

Qt_tftp(未總結)

記錄一下tftp傳輸,日后總結 #ifndef CLIENTWORK_H #define CLIENTWORK_H#include <QObject> #include <QThread>#include <QHostAddress>

關于C的\r回車在不同平臺的問題

首先我們需要搞明白\r和\n是兩回事 \r是回車&#xff0c;前者使光標到行首&#xff0c;&#xff08;carriage return&#xff09; \n是換行&#xff0c;后者使光標下移一格&#xff0c;&#xff08;line feed&#xff09; Linux平臺下 #include <stdio.h> int main()…

Unidac連接Excel文件

終于找到一個連接字符串&#xff0c;記錄一下 UniConnection1.ConnectString : Format(Provider NameODBC;Server"DRIVERMicrosoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb); DBQ%s", [FileName]); UniConnection1.connected:true; UniConnection1.gettable…

神經網絡不確定性綜述(Part I)——A survey of uncertainty in deep neural networks

相關鏈接&#xff1a; 神經網絡不確定性綜述(Part I)——A survey of uncertainty in deep neural networks-CSDN博客 神經網絡不確定性綜述(Part II)——Uncertainty estimation_Single deterministic methods-CSDN博客 神經網絡不確定性綜述(Part III)——Uncertainty est…

Python實現xml解析并輸出到Excel上

1.編寫xml文件 2.使用Python的ElementTree模塊來解析XML import xml.etree.ElementTree as ET from openpyxl import Workbook # 解析XML函數 def parse_xml(xml_file):tree ET.parse(xml_file)root tree.getroot() --打開根節點data []for user in root.findall(Users/Us…