RSA攻击方式总结

1.模数分解

1).解题思路

​ a).找到RSA算法中的公钥(e,n)

​ b).通过n来找到对应的p和q,然后求得φ(n)

​ c).通过gmpy2.invert或者gmpy2.gcdext可以求得e的逆元d

​ d).通过pow函数将密文解密(pow(a,b,c)函数的速度比直接写a**b mod c 要快)

2).直接分解n

​ a).通常情况下,如果n的长度小于256bit(二进制),那么可以通过本地的工具进行分解(RSATool2v17)

​ b).如果n的长度较大,可以尝试在相关网站上进行查询。这些网站上存储着已经分解过的n对应的p和q

​ c).通常,如果n的长度大于512bit,可以考虑下面的方法进行解题

3).利用公约数(模不互素攻击)

​ a).如果题目中两次公钥加密给出了n1和n2有相同的素因子,那么可以通过gmpy2.gcd求出素因子p,然后在分别对n1和n2求出q1和q2

​ b).这种需要利用公约数的题目,通常情况下给出的n长度都在2048bit,4096bit,无法强行破解

4).一些难度比较大的分解方法

​ a).针对大整数的分解有很多种算法,性能上各有优异,有指数级分解方法:Fermat平方差方法,Pollard 方法(ρ,ρ-1),二次型分解算法,椭圆曲线分解法(ECM)和亚指数级分解方法:连分数分解算法,筛法(二次筛选法(QS),一般数域筛法(GNFS))等等。

​ b).但是,有一个开源项目yafu可以自动化的完成分解,不论n的大小

5).做题过程中get到的方法,有可能是方法4里面的包括的

  1. 知道了ϕ(n)\phi (n)ϕ(n),就可以开方:

    这个算法涉及两个点,开方后的取值的大小 Q, Q<p<q, 或 p<Q<q

    1.p<Q<q

    假设 p=7,q=11,则(p-1)*(q-1)=60,
    iroot(60,2)[0] = 7 (iroot()表示开根号,[0]表示取整数部分)
    所以用sympy.next(7),就可以求得7后面的一个素数11

    2.Q<p<q

    假设 p=3,q=5, 则(p-1)*(q-1)=8,
    iroot(8,2)[0] = 2 (iroot()表示开根号,[0]表示取整数部分)
    所以用sympy.next(2),就可以求得2后面的一个素数3

    3.

    虽然Q取值范围不定,但是我们可以肯定的是,Q一定小于max(p,q),即p,q中最大的那个数。所以通过nextprime(Q),就可以求得p,q中任意的值。再用已知的 (ed-1)//k == (p-1)(q-1),就可以求得(p-1)或是(q-1)的值了。最后再进行素性检测就可以了
    原文地址:BUUCTF RSA题目全解2的第十题

2.低加密指数攻击

​ RSA中,e也被称作加密指数,由于e是从(1,φ(n))中任意选取的,有些时候为了缩短加密时间,可以适当的选择较小的e。

1).e=3的小明文攻击(暴力开方破解)

​ a).当e=3时,如果明文过小,导致明文的三次方仍然小于n,那么直接对密文三次开方,就可以得到明文(a如果小于n,则a mod n==a)

​ b).如果明文的三次方大于n,但是不是很大,就可以设k,有:
c=me+knc=m^e+kn c=me+kn
​ 对k进行爆破,若 c−knc-knc−kn 可以开三次根式,那么可以直接得到明文

​ c).使用加密指数e=216+12^{16} +1216+1=65537(费马素数1)可以避免一些对e=3的攻击

​ d).也可以将明文进行填充

2).低加密指数广播攻击(Johan Håstad广播攻击)

​ a).如果选取的加密指数e较小,且给多个接收方用这个e发送相同的明文(n不同),那么就可以进行广播攻击

​ b).当收集到的加密消息个数大于或等于e时,有(假设e=3)如果是根据中国剩余定理,那么加密消息至少得有三个(一个和两个不能得出一组确切的解)
{c1≡me(modn1)c2≡me(modn2)c3≡me(modn3)\begin{cases} c_1\equiv m^e (mod\ n_1)\\ c_2\equiv m^e (mod\ n_2)\\ c_3\equiv m^e (mod\ n_3)\end{cases} ⎩⎪⎨⎪⎧​c1​≡me(mod n1​)c2​≡me(mod n2​)c3​≡me(mod n3​)​
​ 则根据中国剩余定理,可知:
me=(∑i=1nci∗Ni∗Ni−1)%Nm^e=(\sum_{i=1}^{n}{c_i*N_i*N_i^{-1}})\%N me=(i=1∑n​ci​∗Ni​∗Ni−1​)%N

​ 对m开e次方根,即可求得明文。

​ 注:Ni−1N_i^{-1}Ni−1​是NiN_iNi​模nin_ini​的逆元

3)Coppersmith短填充攻击

3.低解密指数攻击

​ a).同样的,低解密指数通常会加快解密的速度,但是也会带来安全隐患

​ b).如果解密指数d<13N14d<\frac{1}{3}N^\frac{1}{4}d<31​N41​,那么一种由Wiener提出的基于连分式的算法可以解出该解密指数(使用了连分式的经典数论理论以及如何找到用有理数对二次无理数最合理的逼近方法)。工具rsa_wiener_attack

​ c).再后来,Boneh指出,使用小于N\sqrt{N}N​的解密指数的系统可能容易受到此类攻击

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IX0ZIAFQ-1628490913273)(D:\daten\博客\图片\RSA\capture_20210712102250404.bmp)]

由图可知,解密指数的攻击范围被提高了

4.共模攻击

​ 如果出现了用相同的模数n来加密相同的明文m(加密指数e不一样),则会得到
{c1≡me1(modn)c2≡me2(modn)\begin{cases} c_1\equiv m^{e_1} (mod\ n) \\ c_2\equiv m^{e_2} (mod\ n) \end{cases} {c1​≡me1​(mod n)c2​≡me2​(mod n)​
​ 此时

​ a).可以利用米勒公式,通过一个人的秘钥(ei,die_i,d_iei​,di​)分解n得到p,q,从而可以通过别人的公钥来计算别人的私钥

​ b).如果两个加密指数互素,那么根据扩展你欧几里得方程可知,有:
e1s1+e2s2=gcd⁡(e1,e2)=1e_1s_1+e_2s_2=\gcd(e_1,e_2)=1 e1​s1​+e2​s2​=gcd(e1​,e2​)=1
​ 那么可得
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \begin{aligned…
​ 所以,可以得到
c1s1∗c2s2≡m(modn)c_1^{s_1}*c_2^{s_2}\equiv m (mod\ n) c1s1​​∗c2s2​​≡m(mod n)
​ 所以,我们在完全不知道密钥的前提下,得到了明文m

​ 注意:在Python的pow函数中,指数不可以为负数,而s1s_1s1​,s2s_2s2​中必然有一个是负数,则需要将对应的c取反,再用-s作为指数进行运算2

k,s1,s2=gmpy2.gcdext(e1,e2)
if s1<0:s1=-s1c1=gmpy2.invert(c1,n)
else:s2=-s2c2=gmpy2.invert(c2,n)
m=pow(c1,s1,n)*pow(c2,s2,n)%n   #虽然不知道为什么,但是好像这样写运算会很快print("所求明文为:",m)
print(long_to_bytes(m))

5.前向搜索攻击3

如果知道所有可能消息的集合,而且该集合相对来说比较小,则攻击者只需要将所有的消息进行加密直到找到一个匹配者。例 如,如果已知消息为‘YES’或‘NO’,那么只需要计算一次就知道哪一个是明文。因此,特别是在比较短小的消息的情况下,应该通过在前面或者后面添加随机位数的填充信息。

6.教科书RSA的两个性质和攻击方法4

教科书RSA是确定性的,意即同样的明文m总是生成同样的密文c。这就使密码本攻击成为可能:攻击者预先计算出全部或部分的m→cm\to cm→c 对照表保存,然后搜索截获的密文匹配即可。确定性也意味着教科书RSA不是语义安全的,密文会泄露明文的某些信息。密文重复出现,表明发送方在重复发送相同的消息。

教科书RSA具有延展性 (malleable),对密文进行特定形式的代数运算,结果会反映到解密的明文中。比如有两段明文 m1m_1m1​和m2m_2m2​,加密后产生c1=m1e%Nc_1= m_1^{e}\%Nc1​=m1e​%N和c2=m2e%Nc_2= m_2^e\%Nc2​=m2e​%N,那么(c1∗c2c_1*c_2c1​∗c2​)解密会得到什么?看如下等式:
(c1∗c2)d≡m1ed∗m2ed≡m1∗m2(modN)(c_1*c_2)^d\equiv m_1^{ed}*m_2^{ed}\equiv m_1*m_2(mod\ N) (c1​∗c2​)d≡m1ed​∗m2ed​≡m1​∗m2​(mod N)
所以两段密文的乘积解密后得到的明文,等于两段明文的乘积。这一特性对一般的RSA加密系统是有害的,它为选择密文攻击 (chosen-ciphertext attack) 提供了机会。下面举例两种攻击场景:

1.设想有一个RSA解密机可以用内部保存的私钥(N,d)解密消息。基于安全考虑,解密机会拒绝同样的密文重复输入。攻击者马文发现一段密文,直接输入到解密机被拒绝,因为密文c以前被解密过。马文找到一种办法破解。他自己准备一段明文,用公钥(N,e)加密生成新的密文c′=rec%Nc'=r^ec\%Nc′=rec%N,然后将密文c′c'c′输入到解密机。解密机没有解过这一段新的密文,所以不会拒绝。解密的结果是
m′≡(c′)d≡redcd≡rm(modN)m'\equiv (c')^d\equiv r^{ed}c^d\equiv rm(mod\ N) m′≡(c′)d≡redcd≡rm(mod N)
现在马文有了m′m'm′,他用公式m≡m′r−1(modN)m\equiv m'r^{-1}(mod\ N)m≡m′r−1(mod N)就可以计算出c对应的m

2.假设马文想让鲍勃在一段消息mmm上签名,但是鲍勃在看过消息内容后拒绝了。马文可以使用称为盲签名的攻击手段可以达成他的目标。他挑选一段随机的消息rrr,生成 m′=rem%Nm'=r^em\%Nm′=rem%N,然后把m′m'm′拿给鲍勃签名。鲍勃可能觉得m′m'm′无关紧要,就签了。鲍勃签名的结果是s′=(m′)d%Ns'=(m')^d\%Ns′=(m′)d%N。现在马文用公式s=s′r−1%Ns=s'r^{-1}\%Ns=s′r−1%N就拿到了鲍勃对原来消息的签名。为什么?原因是
se≡(s′)er−e≡(m′)edr−e≡m(modN)s^e\equiv (s')^er^{-e}\equiv(m')^{ed}r^{-e}\equiv m(mod\ N) se≡(s′)er−e≡(m′)edr−e≡m(mod N)

7.其它常见的题型总结

​ 1).给出了dp、dq的题

​ 首先明确dp、dq是什么:
dp=d%(p−1)dq=d%(q−1)dp= d\%(p-1) \\ dq=d\%(q-1) dp=d%(p−1)dq=d%(q−1)

情况1:dp、dq都给出来了

​ 解决方法:
m1≡cdq(modq)m2≡cdp(modp)m≡(((m2−m1)∗(p−1)%q)∗p+m1)%n\begin{aligned} &m_1\equiv c^{dq}(mod\ q)\\&m_2\equiv c^{dp}(mod\ p)\\&m\equiv (((m_2-m_1)*(p-1)\%q)*p+m_1)\%n \end{aligned} ​m1​≡cdq(mod q)m2​≡cdp(mod p)m≡(((m2​−m1​)∗(p−1)%q)∗p+m1​)%n​
​ 证明:已知m≡cd(modn)m\equiv c^{d}(mod\ n)m≡cd(mod n)​,可得到m=cd+k∗nm=c^{d}+k*nm=cd+k∗n​

​ 又因为n=p∗qn=p*qn=p∗q,可得m=cd+p∗q∗km=c^{d}+p*q*km=cd+p∗q∗k,对它分别取余p,q

​ 可得m1≡cd(modp)m_1\equiv c^{d}(mod\ p)m1​≡cd(mod p)(1),m2≡cd(modq)m_2\equiv c^{d}(mod\ q)m2​≡cd(mod q)(2)

​ 式(1)可以变形为cd=kp+m1c^{d}=kp+m_1cd=kp+m1​,带入(2),可得m2≡(kp+m1)(modq)m_2\equiv (kp+m_1)(mod\ q)m2​≡(kp+m1​)(mod q)

​ 两边同时减去m1m_1m1​,可得(m2−m1)≡kp(modq)(m_2-m_1)\equiv kp(mod\ q)(m2​−m1​)≡kp(mod q)

​ 因为p,q互素(gcd(p,q)=1gcd(p,q)=1gcd(p,q)=1),可以求得p的逆元,得到
(m2−m1)∗p−1≡k(modq)(m_2-m_1)*p^{-1}\equiv k(mod\ q) (m2​−m1​)∗p−1≡k(mod q)
​ 将它变形为
k≡(m2−m1)∗p−1(modq)k\equiv (m_2-m_1)*p^{-1}(mod\ q) k≡(m2​−m1​)∗p−1(mod q)
​ 然后与上面(1)的变形合并,可得
cd=((m2−m1)∗p−1(modq))∗p+m1c^{d}=((m_2-m_1)*p^{-1}(mod\ q))*p+m_1 cd=((m2​−m1​)∗p−1(mod q))∗p+m1​
​ 将m≡cd(modn)m\equiv c^{d}(mod\ n)m≡cd(mod n),得到
m≡((m2−m1)∗p−1(modq))∗p+m1(modn)(α)m\equiv ((m_2-m_1)*p^{-1}(mod\ q))*p+m_1(mod\ n)\ \ (\alpha) m≡((m2​−m1​)∗p−1(mod q))∗p+m1​(mod n)  (α)
​ 现在根据费马小定理5可以将dp、dq带入m1m_1m1​、m2m_2m2​中得到
m1≡cdq(modq)(β)m2≡cdp(modp)(γ)m_1\equiv c^{dq}(mod\ q)\ \ (\beta)\\m_2\equiv c^{dp}(mod\ p)\ \ (\gamma) m1​≡cdq(mod q)  (β)m2​≡cdp(mod p)  (γ)
​ 这一步带入的证明见注释6

​ 则式子(α)(β)(γ)(\alpha)(\beta)(\gamma)(α)(β)(γ)即为所求。

from Crypto.Util.number import long_to_bytes
c=int(input("请输入密文c"))
n=int(input("请输入n(不存在请输入0)"))
#存在给出p,q没有给出n的情况
p=int(input("请输入p(不存在请输入0)"))
q=int(input("请输入q(不存在请输入0)"))
dp=int(input("请输入dp"))
dq=int(input("请输入dq"))
if n==0:n=p*q
m1=pow(c,dq,q)
m2=pow(c,dp,p)
k=(m2-m1)*(p-1)%q
m=k*p+m1%n
print("所求明文为:",m)
print(long_to_bytes(m))

情况2:只给出了dp/dq的题

​ 假设给出的是dp,则有dp=d%(p−1)dp=d\%(p-1)dp=d%(p−1),变形可得
d∗e=k1∗(p−1)∗e+dp∗ed*e=k_1*(p-1)*e+dp*e d∗e=k1​∗(p−1)∗e+dp∗e
​ 变形后与式子d∗e≡1(modϕ(n))d*e\equiv 1(mod\ \phi(n))d∗e≡1(mod ϕ(n))结合,可得
k1∗e∗(p−1)+dp∗e=1+k2∗(p−1)∗(q−1)dp∗e=[k2∗(p−1)∗(q−1)+1]−[k1∗e∗(p−1)]+1dp∗e=[k2∗(q−1)−k1∗e]∗(p−1)+1\begin{aligned} k_1*e*(p-1)+dp*e&=1+k_2*(p-1)*(q-1)\\ dp*e&=[k_2*(p-1)*(q-1)+1]-[k_1*e*(p-1)]+1\\ dp*e&=[k_2*(q-1)-k_1*e]*(p-1)+1 \end{aligned} k1​∗e∗(p−1)+dp∗edp∗edp∗e​=1+k2​∗(p−1)∗(q−1)=[k2​∗(p−1)∗(q−1)+1]−[k1​∗e∗(p−1)]+1=[k2​∗(q−1)−k1​∗e]∗(p−1)+1​
​ 设:X=k2∗(q−1)−k1∗ek_2*(q-1)-k_1*ek2​∗(q−1)−k1​∗e,有dp∗e=X∗(p−1)+1dp*e=X*(p-1)+1dp∗e=X∗(p−1)+1,因为dp=d%(p−1)dp=d\%(p-1)dp=d%(p−1),所以dp<p−1dp<p-1dp<p−1,可得X<eX<eX<e,X∈(0,e)X\in(0,e)X∈(0,e)和式子(p−1)=dp∗e−1X(p-1)=\frac{dp*e-1}{X}(p−1)=Xdp∗e−1​

​ 则有遍历区间(0,e),找到一个X可以整除(不是被整除)(dp*e-1),且对应的p能够整除n的情况,然后求出q,即可得到明文。

​ 给出dq同理。

for X in range(1,e):if (dp*e-1)%X == 0:if n%(((dp*e-1)/X)+1)==0:p=((dp*e-1)/X)+1q=n/(((dp*e-1)/X)+1)phi = (p-1)*(q-1)d = gmpy2.invert(e,phi)%phi
import gmpy2
e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751for X in range(2,e):if (dp*e-1)%X == 0:if n%(((dp*e-1)//X)+1)==0:  #这里和下面的//如果换成/就会出现OverflowError: int too large to convert to float的问题p=((dp*e-1)//X)+1q=n//(((dp*e-1)//X)+1)phi = (p-1)*(q-1)d = gmpy2.invert(e,phi)%phim=pow(c,d,n)

参考来源:

  1. 【技术分享】CTF中RSA的常见攻击方法

  2. 《密码学导引》(美)Paul Garrett著

  3. 《现代密码分析学——破译高级密码的技术》(美)Christopher Swenson著

  4. CTF-RSA1(已知p、q、dp、dq、c)

  5. RSA的攻与防(一)

  6. RSA的dp泄露 [BUUCTF] RSA2


  1. 费马素数:是一类特殊形式的数,形如2m+12^m+12m+1​的数如果是素数,那么它被称作费马素数。与之相对的是梅森素数:形如2n−12^n-12n−1​的素数 ↩︎

  2. c1s=(c1−1)−s%nc_1^{s}=(c_1^{-1})^{-s}\%nc1s​=(c1−1​)−s%n ↩︎

  3. 这一段来自参考来源2 ↩︎

  4. 这一段来自参考来源5 ↩︎

  5. 费马小定理:如果有条件:1). p为素数,2). gcd(a,p)=1gcd(a,p)=1gcd(a,p)=1,则有式子ap−1≡1(modp)a^{p-1}\equiv1(mod\ p)ap−1≡1(mod p)成立。这个定理也常常用来计算乘法逆元:a∗ap−2≡1(modp)a*a^{p-2}\equiv1(mod\ p)a∗ap−2≡1(mod p),则ap−2a^{p-2}ap−2是a的乘法逆元 ↩︎

  6. 证明:由于费马小定理,可知在c和p互素的情况下(p必然是素数),那么将式子d=dp+k∗(p−1)d=dp+k*(p-1)d=dp+k∗(p−1)带入式子m2≡cd(modp)m_2\equiv c^d (mod\ p)m2​≡cd(mod p),可得 m2≡cdp+k(p−1)(modp)m_2\equiv c^{dp+k(p-1)}(mod\ p)m2​≡cdp+k(p−1)(mod p),m2≡cdp∗ck(p−1)(modp)m_2\equiv c^{dp}*c^{k(p-1)}(mod\ p)m2​≡cdp∗ck(p−1)(mod p)。因为c(p−1)≡1(modp)c^{(p-1)}\equiv 1(mod\ p)c(p−1)≡1(mod p),可得:m2≡cdp∗(1)k(modp)m_2\equiv c^{dp}*(1)^k (mod\ p)m2​≡cdp∗(1)k(mod p),m2≡cdp(modp)m_2\equiv c^{dp}(mod\ p)m2​≡cdp(mod p),根据对称性,可知m1m_1m1​同理。 ↩︎

RSA攻击方法总结笔记相关推荐

  1. 电磁攻击方法与能量攻击方法的对比

    摘  要:旁道攻击是避开复杂的密码算法,利用密码算法在软硬件实现中泄露出的各种信息进行攻击,电磁攻击和能量攻击是两种不同旁道攻击方法,二者既有共同之处,又有各自的特点,可以通过实验分析,进行对比.   ...

  2. 网络安全红队常用的攻击方法及路径

    一.信息收集 收集的内容包括目标系统的组织架构.IT资产.敏感信息泄露.供应商信息等各个方面,通过对收集的信息进行梳理,定位到安全薄弱点,从而实施下一步的攻击行为. 域名收集 1.备案查询 天眼查 爱 ...

  3. Congestion Attacks in Payment Channel Networks(支付渠道网络中的拥塞攻击)阅读笔记

    Congestion Attacks in Payment Channel Networks(支付渠道网络中的拥塞攻击)阅读笔记 一.Keywords Lightning Network: 闪电网络 ...

  4. CTF-Crypto-RSA基本原理及常见攻击方法

    0X00 RSA简介: 1977年,三位数学家Rivest.Shamir 和 Adleman 设计了一种算法,可以实现非对称加密.这种算法用他们三个人的名字命名,叫做RSA算法. 从那时直到现在,RS ...

  5. Adversary Attack(对抗攻击)论文阅读笔记

    引言: 最近开始学习Adversary Attack(对抗攻击)有关的内容,于是便从Ian GoodFollow的论文开始读起,后面每篇博客都会列举三篇的阅读笔记,来记录学习的经历.如果有讲得不到位或 ...

  6. buuctf rsa刷题记录(记几种类型的RSA攻击二)

    前言 最近学习了点儿rsa这里总结以下我的buctf rsa部分刷题记录 dp,dp泄露 场景描述: 假设题目仅给出p,q,dp,dq,c,即不给公钥e 这种参数是为了让解密的时候更快速产生的 dp= ...

  7. cve-2019-7609 Kibana远程代码执行漏洞攻击方法和漏洞原理分析

    目录 0x00 前言 0x01 漏洞简介 0x02 环境搭建 0x03 漏洞利用 0x04 漏洞机理 1.POC验证 ​2.漏洞产生原理和攻击思路 3.payload构建 0x05 危害分析和处理建议 ...

  8. 高效的密码攻击方法:彩虹表

    为了保护账号安全,几乎所有网站都不会保存用户的密码,而是用哈希加密算法对密码进行计算,将得到的哈希串保存在数据库中,每次用户登录时会将用户提交的密码用同样的算法计算,并将结果与数据库中保存的哈希串比对 ...

  9. 灰帽黑客:正义黑客的道德规范、渗透测试、攻击方法和漏洞分析技术(第3版)

    基本信息 灰帽黑客:正义黑客的道德规范.渗透测试.攻击方法和漏洞分析技术(第3版)原书名: Gray Hat Hacking: The Ethical Hacker's Handbook, Third ...

最新文章

  1. 基于centos6的mysql5.7.13主从部署(一)
  2. 从乘法表JAVA意思4_四、Java从头开始-我的九九乘法表(二)
  3. html range关联文本框,HTML5gt;meter标签与input(type=range)标签结合制作简易范围指示器...
  4. 【Paper】An Experiment Comparing Double Exponential Smoothing and Kalman Filter-Based Predict
  5. 链表系列之单链表——使用单链表实现大整数相加
  6. 《Java 高并发》05 线程的基本操作
  7. 弹性和瞬态故障处理库Polly介绍
  8. React开发(129):ant design学习指南之form中的layout
  9. bootstrap下载地址
  10. 用友uclient客户端下载手机_影院6080手机版-影院6080手机客户端下载
  11. 【转】Java计算文件的hash值
  12. java中什么泛型_Java中的泛型
  13. Nginx 500错误总结
  14. tde数据库加密_在其他服务器上还原启用了透明数据加密(TDE)的数据库
  15. 机器学习基础(三十) —— 线性回归、正则化(regularized)线性回归、局部加权线性回归(LWLR)
  16. 21天c语言 ppt,21天学通C语言 第1章 C语言与程序概述.ppt
  17. Qt+OpenCV配置教程(图解亲测)
  18. 分享几款强大的录音软件,厉害炸了!
  19. android 解谜 游戏,Android解谜游戏《100个任务》图文攻略
  20. android视频添加字幕,手机视频加字幕app 怎样用安卓手机在视频画面加文字字幕...

热门文章

  1. 实战三十三:STAMP算法实现商品推荐实战 代码+数据
  2. 更少标注的机器学习方法——主动学习(python示例)
  3. 爱心代码(网上整理)
  4. 性格测试分析软件,4种性格测试系统
  5. Altium Designer 18 速成实战 第二部分 元件库(原理图库)创建 (一)元件符号的概述
  6. VSTO | C#快速开发电子签章插件
  7. el-checkbox状态值修改而样式不修改的原因
  8. 基于Java毕业设计疫情期间物资分派管理系统源码+系统+mysql+lw文档+部署软件
  9. openlayer加载矢量切片
  10. ubuntu英文版变成中文版