NTRU 加密方案
参考文献:
- [Rivest97] Rivest R L. All-or-nothing encryption and the package transform[C]//Fast Software Encryption: 4th International Workshop, FSE’97 Haifa, Israel, January 20–22 1997 Proceedings 4. Springer Berlin Heidelberg, 1997: 210-218.
- [HPS98] Hoffstein J, Pipher J, Silverman J H. NTRU: A ring-based public key cryptosystem[C]//International algorithmic number theory symposium. Berlin, Heidelberg: Springer Berlin Heidelberg, 1998: 267-288.
- [HS00] Hoffstein J, Silverman J. Optimizations for NTRU[J]. Public-Key Cryptography and Computational Number Theory, De Gruyter Proceedings in Mathematics, 2000: 77-88.
- [SS11] Stehlé D, Steinfeld R. Making NTRU as secure as worst-case problems over ideal lattices[C]//Advances in Cryptology–EUROCRYPT 2011: 30th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Tallinn, Estonia, May 15-19, 2011. Proceedings 30. Springer Berlin Heidelberg, 2011: 27-47.
文章目录
- All-or-Nothing Transfom
- Strongly Non-separable
- Package Transform
- NTRU
- Original
- Optimization
- CCA 安全性
- 容易求逆的模数
- 多项式模数
- 稀疏的多项式
- Provably Seure
All-or-Nothing Transfom
Strongly Non-separable
[Rivest97] 提出了一种对称加密模式:强不可分离模式。它可以抵御:暴力攻击、选择明文攻击、相关明文攻击。
为了实现强不可分离性,它提出了全或无转换(all-or-nothing transfom,AONT),
给定加密方案 Π \Pi Π,消息 m 1 , ⋯ , m s m_1,\cdots,m_s m1,⋯,ms,我们构造新的方案 Π ′ \Pi' Π′:
- 利用 AONT,把消息转化为 “伪消息” m 1 ′ , ⋯ , m s ′ m_1',\cdots,m_s' m1′,⋯,ms′
- 对于 “伪消息” 简单地用 Π \Pi Π 加密
可以证明,方案 Π ′ \Pi' Π′ 是强不可分离的。如果敌手试图暴力攻击,那么它不得不对所有的密文分块全部解密得到 m ′ m' m′,然后才能恢复出消息 m m m,从而根据语义判断是否解密正确。对于 s s s 个密文分块,带来了 s s s 倍的惩罚。
不过,AONT 带来一个问题:错误传播严重。[Rivest97] 提出可以在 AONT 和 Enc 之间,添加 ECC 纠错过程。不过,冗余的信息带来了一定的弱点,安全性会略微下降。
Package Transform
[Rivest97] 给出了一种 AONT 的实现方案:Package Transform
这是一个随机的编码过程,其中的 K 0 K_0 K0 是固定且公开的随机数, K ′ K' K′ 是临时选取的足够长的随机数(并不是秘密), E E E 是某种对称加密算法(实际的作用是 RO,或者说 PRF 和 Hash)
对于公钥方案来说,待加密的消息 m m m,
- 选取随机数 r r r,计算 G ( r ) G(r) G(r) 作为一次秘钥,编码出 m ′ = m ⊕ G ( r ) m'=m \oplus G(r) m′=m⊕G(r)
- 计算 H ( m ′ ) H(m') H(m′) 作为一次秘钥,编码出 r ′ = r ⊕ H ( m ′ ) r'=r \oplus H(m') r′=r⊕H(m′)
- 消息 m m m 对应的伪消息是 m ′ ∥ r ′ m'\|r' m′∥r′(随机数,但是求逆容易)
敌手必须知道 m ′ m' m′ 的全部比特,才能恢复出 H ( m ′ ) H(m') H(m′),必须再知道 r ′ r' r′ 的全部比特,才能恢复出 r r r,然后才能恢复出 m = m ′ ⊕ G ( r ) m=m' \oplus G(r) m=m′⊕G(r)。只要暴力选取的 m ′ ∥ r ′ m'\|r' m′∥r′ 中的某一比特不正确,那么获得的结果就是随机乱码。
NTRU
Original
[HPS98] 提出了最初的 NTRU 加密算法,
- 交换环 R R R,互素的理想 p + q = R p+q=R p+q=R,商环 R q = R / q R R_q=R/qR Rq=R/qR 和 R p = R / p R R_p=R/pR Rp=R/pR
- 充分大的子集 R f , R g , R r , R m , R a ⊆ R R_f,R_g,R_r,R_m,R_a \subseteq R Rf,Rg,Rr,Rm,Ra⊆R
- KeyGen:
- 采样 f ← R f f \gets R_f f←Rf, g ← R g g \gets R_g g←Rg
- 预计算并存储 f q − 1 ( m o d q ) f_q^{-1} \pmod{q} fq−1(modq) 和 f p − 1 ( m o d p ) f_p^{-1} \pmod{p} fp−1(modp)
- 计算 h = p ⋅ g ⋅ f q − 1 ( m o d q ) h = p \cdot g \cdot f_q^{-1} \pmod q h=p⋅g⋅fq−1(modq),它在 R q R_q Rq 中统计均匀
- 私钥 f f f,公钥 h h h
- Enc:给定消息 m ∈ R m m \in R_m m∈Rm
- 采样 r ← R r r \gets R_r r←Rr
- 输出 e = r ⋅ h + m ( m o d q ) e=r \cdot h + m \pmod q e=r⋅h+m(modq),它是 R q R_q Rq 中均匀的
- Dec:给定密文 e ∈ R / q R e \in R/qR e∈R/qR
- 计算 a ≡ f ⋅ e ( m o d q ) a \equiv f \cdot e \pmod q a≡f⋅e(modq) 使得 a ∈ R a a \in R_a a∈Ra
- 输出 f p − 1 ⋅ a ( m o d p ) f_p^{-1} \cdot a \pmod p fp−1⋅a(modp),它是 m ( m o d p ) m \pmod p m(modp)
可以验证,
f ⋅ e = p ⋅ r ⋅ g + f ⋅ m ∈ R q f \cdot e = p \cdot r \cdot g + f \cdot m \in R_q f⋅e=p⋅r⋅g+f⋅m∈Rq
只要它的规模小于 q q q,那么就可以用 R q R_q Rq 模拟出正确的 p ⋅ r ⋅ g + f ⋅ m ∈ R p \cdot r \cdot g + f \cdot m \in R p⋅r⋅g+f⋅m∈R,进而可以在 R p R_p Rp 下解密出正确的消息。我们称 R R R 上的多项式是窄的(narrow),如果它的系数取值的直径比 q q q 严格小,
∥ f ∥ ∞ : = max i f i − min i f i \|f\|_\infty := \max_i f_i - \min_i f_i ∥f∥∞:=imaxfi−iminfi
一般地,选取 R = Z [ x ] / ( x N − 1 ) R=\mathbb Z[x]/(x^N-1) R=Z[x]/(xN−1) 是卷积多项式环,设置 R f , R g , R m , R r R_f,R_g,R_m,R_r Rf,Rg,Rm,Rr 是系数取值 { 0 , 1 } \{0,1\} {0,1} 或者 { 0 , ± 1 } \{0,\pm 1\} {0,±1} 的小多项式集合(乘法就是加法和移位,在中等规模参数下甚至比 NTT/FFT 更快)。对于合适的参数,比如 ( p , q ) = ( 2 , 127 ) (p,q)=(2,127) (p,q)=(2,127) 或者 ( p , q ) = ( 3 , 128 ) (p,q)=(3,128) (p,q)=(3,128), p ⋅ r ⋅ g + f ⋅ m p \cdot r \cdot g + f \cdot m p⋅r⋅g+f⋅m 几乎总是窄的。
未进行效率优化的 C 实现,速度比 RSA 快得多:
Optimization
[HS00] 给出了 NTRU 加密方案的优化:提升安全性、提高计算效率
CCA 安全性
为了抵御 CCA 攻击,我们使用 FO 转换。为了抵御字典攻击,我们使用 AONT 模式。[HS00] 组合了两者。
加密:
- 输入明文 M = M 1 ∥ M 2 M=M_1\|M_2 M=M1∥M2,随机采样 R = R 1 ∥ R 2 R=R_1\|R_2 R=R1∥R2
- 令 H 1 , H 2 H_1,H_2 H1,H2 是两个哈希函数(用于 AONT),计算 m 1 = ( M 1 ∥ R 1 ) ⊕ H 1 ( M 2 ∥ R 2 ) m_1 = (M_1\|R_1) \oplus H_1(M_2\|R_2) m1=(M1∥R1)⊕H1(M2∥R2), m 2 = ( M 2 ∥ R 2 ) ⊕ H 2 ( m 1 ) m_2 = (M_2\|R_2) \oplus H_2(m_1) m2=(M2∥R2)⊕H2(m1),获得 “伪消息” m = m 1 ∥ m 2 m=m_1\|m_2 m=m1∥m2
- 令 G G G 是哈希函数(用于 FO),计算随机带 r = G ( M ∥ R ) r=G(M\|R) r=G(M∥R)
- 输出密文 e = E n c ( m ; r ) e = Enc(m;r) e=Enc(m;r)
解密:
- 解密获得 m = D e c ( e ) m=Dec(e) m=Dec(e)
- 从 m = m 1 ∥ m 2 m=m_1\|m_2 m=m1∥m2 中解码出消息 M M M 和随机数 R R R
- 重新计算随机带 r = G ( M ∥ R ) r=G(M\|R) r=G(M∥R)
- 检查 e − m = r ⋅ h e-m = r \cdot h e−m=r⋅h 是否成立(可以只检查少量的系数)
- 如果检查通过,则输出明文 M M M
容易求逆的模数
NTRU 的主要开销:秘钥生成过程的 f q − 1 f_q^{-1} fq−1 和 f p − 1 f_p^{-1} fp−1,加密过程的 r ⋅ h ( m o d q ) r \cdot h \pmod q r⋅h(modq),解密过程的 f ⋅ e ( m o d q ) f \cdot e \pmod q f⋅e(modq) 和 f p − 1 ⋅ a ( m o d p ) f_p^{-1} \cdot a \pmod p fp−1⋅a(modp)
如果选取
f = p ⋅ f ′ + 1 , f ′ ∈ R f = p \cdot f' + 1,\,\, f' \in R f=p⋅f′+1,f′∈R
它满足 f = f p − 1 = 1 ( m o d p ) f = f_p^{-1} = 1 \pmod p f=fp−1=1(modp),解密过程为
f ⋅ e = m + p ⋅ ( g ⋅ r + m ⋅ f ′ ) f \cdot e = m + p \cdot (g \cdot r + m \cdot f') f⋅e=m+p⋅(g⋅r+m⋅f′)
噪声项 p ⋅ ( g ⋅ r + m ⋅ f ′ ) p \cdot (g \cdot r + m \cdot f') p⋅(g⋅r+m⋅f′) 只要不超过 q q q,那么直接计算
m = [ f ⋅ e ] q ( m o d p ) m = [f \cdot e]_q \pmod p m=[f⋅e]q(modp)
就得到了正确的明文。
多项式模数
在计算机中设置 q = 2 k q=2^k q=2k 时可以快速实现模约简(比特串截断),其他类型的模约简会慢得多(除法)。但是,此时的 p p p 需要与 q q q 互素,那么 p ≥ 3 p \ge 3 p≥3 是奇数,它的范数过大了,导致噪声项容易越界导致解密错误。
实际上,我们只要求 p , q p,q p,q 是互素的理想,并不限制它是整数。我们可以选取 p = p ( x ) ∈ Z [ x ] p=p(x) \in \mathbb Z[x] p=p(x)∈Z[x],使得它满足
( p , q , x N − 1 ) = ( 1 ) = Z [ x ] (p, q, x^N-1) = (1) = \mathbb Z[x] (p,q,xN−1)=(1)=Z[x]
于是就有 ( p ) + ( q ) = R (p)+(q) = R (p)+(q)=R 是互素理想。
[HS00] 讨论了 X k ± 1 X^k \pm 1 Xk±1 以及 X k ± X j ± 1 X^k \pm X^j \pm 1 Xk±Xj±1 的选取方式,发现它们都不是好的选择。最终它选择了 p = X + 2 p=X+2 p=X+2,奇数 N > 7 N>7 N>7,密文模数 q = 128 q=128 q=128,
-
可以验证
1 = ( X + 2 ) ⋅ ( X N − 1 − 2 X N − 2 + ⋯ + 2 N − 1 ) − ( X N − 1 ) − 128 ⋅ 2 N − 1 1 = (X+2) \cdot (X^{N-1}-2X^{N-2}+\cdots+2^{N-1}) - (X^N-1)-128 \cdot 2^{N-1} 1=(X+2)⋅(XN−1−2XN−2+⋯+2N−1)−(XN−1)−128⋅2N−1从而 ( p , q ) = 1 (p,q)=1 (p,q)=1 互素
-
存在同构 R p → Z 2 N + 1 R_p \to \mathbb Z_{2^N+1} Rp→Z2N+1,
f ( x ) ↦ a ( − 2 ) f(x) \mapsto a(-2) f(x)↦a(−2)因此 ∣ R p ∣ = 2 N + 1 |R_p|=2^N+1 ∣Rp∣=2N+1 足够大
-
对于二元系数的多项式子集 R m R_m Rm(大小 2 N 2^N 2N,并非 R 2 R_2 R2),存在内射 R m → R p ≅ Z 2 N + 1 R_m \to R_p \cong \mathbb Z_{2^N+1} Rm→Rp≅Z2N+1,
最大元素是偶数项系数非零, 1 + ( − 2 ) 2 + ⋯ + ( − 2 ) N − 1 = ( 2 N + 1 − 1 ) / 3 1+(-2)^2+\cdots+(-2)^{N-1}=(2^{N+1}-1)/3 1+(−2)2+⋯+(−2)N−1=(2N+1−1)/3
最小元素是奇数项系数非零, ( − 2 ) 1 + ( − 2 ) 3 ⋯ + ( − 2 ) N − 2 = − ( 2 N − 2 ) / 3 (-2)^1+(-2)^3\cdots+(-2)^{N-2}=-(2^N-2)/3 (−2)1+(−2)3⋯+(−2)N−2=−(2N−2)/3
我们希望对于任意的 a ( x ) ∈ Z [ x ] a(x) \in \mathbb Z[x] a(x)∈Z[x], deg a ( x ) ≤ N − 1 \deg a(x) \le N-1 dega(x)≤N−1,将它转换为某个 “小” 多项式 b ( x ) ∈ Z [ x ] b(x) \in \mathbb Z[x] b(x)∈Z[x](作为商环 Z [ x ] / ( x N − 1 , x + 2 ) \mathbb Z[x]/(x^N-1,x+2) Z[x]/(xN−1,x+2) 的代表元),满足
-
剩余类相同: a ( − 2 ) = b ( − 2 ) ∈ Z 2 N + 1 ⟺ a ( x ) = b ( x ) ∈ R p a(-2) = b(-2) \in \mathbb Z_{2^N+1} \iff a(x) = b(x) \in R_p a(−2)=b(−2)∈Z2N+1⟺a(x)=b(x)∈Rp
-
度数不大: deg b ( x ) ≤ N − 1 \deg b(x) \le N-1 degb(x)≤N−1
-
系数不大:系数的取值为 { 0 , 1 } \{0,1\} {0,1}
-
一个例外:满足 a ( − 2 ) = ( 2 N + 1 + 2 ) / 3 ( m o d 2 N + 1 ) a(-2) = (2^{N+1}+2)/3 \pmod{2^N+1} a(−2)=(2N+1+2)/3(mod2N+1) 的那些 a ( x ) a(x) a(x),设置为
b ( x ) = 2 + x 2 + x 4 + ⋯ + x N − 1 b(x) = 2+x^2+x^4+\cdots+x^{N-1} b(x)=2+x2+x4+⋯+xN−1
[HS00] 给出了关于模数 p = x + 2 p=x+2 p=x+2 的模约简算法:输入 a ( x ) = ∑ i = 0 N − 1 a i x i a(x)=\sum_{i=0}^{N-1} a_i x^i a(x)=∑i=0N−1aixi,主循环至多执行 2 N + 1 2N+1 2N+1 次,就可以输出满足上述性质的 b ( x ) b(x) b(x),
如果 a ( x ) a(x) a(x) 的系数都是小于 2 N 2^N 2N 的正整数,则实际的循环执行次数上界为: N + 1 + log max i a i N+1+\log \max_i a_i N+1+logmaxiai
稀疏的多项式
在 NTRU 计算过程中出现的多项式, h , e h,e h,e 的系数是均匀的, r , f r,f r,f 的系数是小的。假如设置 r r r 的汉明重量是 d d d,那么乘法 r ⋅ h r \cdot h r⋅h 的复杂度为 O ( d N ) O(dN) O(dN),它包含了 ( N − 1 d − 1 ) {N-1 \choose d-1} (d−1N−1) 个元素。
如果我们设置随机带 r ( x ) = r 1 ( x ) ⋅ r 2 ( x ) r(x) = r_1(x) \cdot r_2(x) r(x)=r1(x)⋅r2(x),其中 r i ( x ) r_i(x) ri(x) 是重量 d i d_i di 的稀疏多项式,并且保证 d ≈ d 1 ⋅ d 2 d \approx d_1 \cdot d_2 d≈d1⋅d2 依旧有充足的熵,
r ⋅ h = r 1 ⋅ ( r 2 ⋅ h ) r \cdot h = r_1 \cdot (r_2 \cdot h) r⋅h=r1⋅(r2⋅h)
多项式乘法的复杂度仅仅为 O ( d 1 N + d 2 N ) O(d_1N + d_2N) O(d1N+d2N)(空间分割,把复杂度中的乘法变成了加法)
私钥 f f f 也可以类似的处理,
f = 1 + p ⋅ ( f 1 ⋅ f 2 + f 3 ) f = 1+p \cdot(f_1 \cdot f_2 + f_3) f=1+p⋅(f1⋅f2+f3)
并且可以通过拒绝采样技术,使得 f f f 的系数都是 { 0 , 1 } \{0,1\} {0,1} 的。原则上这降低了秘钥空间的大小,但是敌手依旧需要尝试计算出 f ′ = f 1 ⋅ f 2 + f 3 f'=f_1 \cdot f_2 + f_3 f′=f1⋅f2+f3 之后,才能判断它是否是一个合法秘钥。解密运算
f ⋅ e = e + p e f 1 f 2 + p e f 3 f \cdot e = e+pef_1f_2 + pef_3 f⋅e=e+pef1f2+pef3
计算复杂度为 O ( d 1 N + d 2 N + d 3 N ) O(d_1N+d_2N+d_3N) O(d1N+d2N+d3N)
Provably Seure
[SS11] 给出了第一个标准模型下可证明安全的 NTRU 加密/签名方案。
首先,对参数的选取做了修改:
KeyGen 算法:
可证明安全的 NTRU 加密方案:
可以证明公钥 p k = h pk=h pk=h 是均匀的(难以恢复出私钥 s k = f sk=f sk=f),
NTRU 方案的 IND-CPA 安全性归约到了 RLWE 问题,进而归约到理想格上的 Approx-SVP 问题:
相关文章:

NTRU 加密方案
参考文献: [Rivest97] Rivest R L. All-or-nothing encryption and the package transform[C]//Fast Software Encryption: 4th International Workshop, FSE’97 Haifa, Israel, January 20–22 1997 Proceedings 4. Springer Berlin Heidelberg, 1997: 210-218.[…...

第一章前端开发ES6基础
认识ES6 概述 ES6表示ECMAScript规范的第六版,正式名称为ECMAScript 2015,ECMAScript是由ECMA国际标准组织制定的一项脚本语言的标准规范化,引入了许多新特性和语法。 其中包括箭头函数、let和const声明、类、模板字符串、解构赋值、参数默…...

【算法练习Day30】无重叠区间 划分字母区间合并区间
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 无重叠区间划分字母区间合并…...

Linux部署Redis哨兵集群 一主两从三哨兵(这里使用Redis6,其它版本类似)
目录 一、哨兵集群架构介绍二、下载安装Redis2.1、选择需要安装的Redis版本2.2、下载并解压Redis2.3、编译安装Redis 三、搭建Redis一主两从集群3.1、准备配置文件3.1.1、准备主节点6379配置文件3.1.2、准备从节点6380配置文件3.1.3、准备从节点6381配置文件 3.2、启动Redis主从…...

VR结合|山海鲸虚拟展厅解决方案
方案背景 虚拟现实技术是另一项革命性的创新,它可以将用户带入一个完全虚拟的环境中。借助VR头盔和控制器,用户可以亲临虚拟现实中,与数字世界互动,仿佛置身于其中。 山海鲸根据用户实际需求变化将数字孪生与虚拟现实技术相结合…...

记一次企业微信的(CorpID)和密钥(Secret)泄漏的利用案例
文章目录 一、介绍二、利用过程1、获取AccessToken2、获取企业微信接口IP段3、获取企业微信回调IP段4、通过部门ID,查看返回的ID5、通过部门ID,查看用户列表6、通过便利ID,发现用户信息泄露,可以进行提交报告7、通过添加接口,添加企业账号8、登陆企业账号进行测试三、参考…...

使用Selenium和Java编写爬虫程序
以下是一个使用Selenium和Java编写的音频爬虫程序,该程序使用了proxy的代码。请注意,这个示例需要在IDE中运行,并且可能需要根据您的系统和需求进行调整。 import java.io.IOException; import java.util.List; import java.util.concurrent…...

【Java】PAT Basic Level 1023 组个最小数
题目 1024 组个最小数 作者 CAO, Peng 单位 Google 给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1ÿ…...

Redis中设置Hash数据类型的过期时间
1 方案 可以先对key进行赋值,然后对key设置一个过期时间。 (1)依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.7.3</version></dependency>…...

你真的了解CPU和GPU?
目录 先举个栗子 CPU 什么是CPU CPU的定义 CPU的组成 CPU的功能 GPU 什么是GPU GPU的定义 GPU的组成 GPU的功能 CPU和GPU的区别 先举个栗子 假设你正在编辑一份文档,这时可以将CPU和GPU的角色比喻为文档编辑过程中的两个不同任务。 1. CPU CPU就好比是…...

HarmonyOS开发:NodeJs脚本实现组件化动态切换
前言 上篇文章,我们使用NodeJs脚本完成了HarmonyOS项目的组件化运行,但是由于脚本是基于4.0.0.400版本的DevEco Studio开发的,可能在配置文件的修改上有些许差距,那么遇到这种情况怎么办,一种是再写一套针对性的脚本文…...

基于springboot实现就业信息管理系统项目【项目源码+论文说明】计算机毕业设计
基于springboot实现就业信息管理系统演示 摘要 随着信息化时代的到来,管理系统都趋向于智能化、系统化,就业信息管理系统也不例外,但目前国内仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人…...

Vue组件的本质和手写通过render渲染函数渲染组件
1.组件的本质 组件就是一组 DOM 元素的封装,本质就是一个对象 (mounted函数中打印一下组件即可看到打印的是一个对象) 如何利用javascript对象来描述一个组件? const MyComponent {render() {return {tag: div,props: {onClick: () > alert(hell…...

【优选算法系列】第一节.双指针(283. 移动零和1089. 复写零)
作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:优选算法系列 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!!…...

Vue(uniapp)父组件方法和子组件方法执行优先顺序
涉及到的知识点:watch监控:先看问题,父组件从后端通过$ajax获取数据,在将父组件将值传输给子组件,使用子组件使用created钩子函数获取数据,按自己的想法应该是父组件先获取后端数据,在传入给子组…...

怎么突破反爬虫机制
在当今的数字化时代,网络爬虫已经成为了收集信息和数据的重要工具。然而,许多网站和平台都配备了反爬虫机制,以防止恶意攻击和过度访问。对于普通用户来说,如何突破这些反爬虫机制呢?本文将为你提供一些实用的技巧和建…...

CSP-J2023入门组第二轮T4:旅游巴士
题目描述 小 Z 打算在国庆假期期间搭乘旅游巴士去一处他向往已久的景点旅游。 旅游景点的地图共有 n n n 处地点,在这些地点之间连有 m m m 条道路。其中 1 1...

OS的Alarm定时器调度机制
调度表触发的任务在编译时就被静态定义,任务的触发时间和执行顺序是固定的。这种方式适用于已知的、固定的任务触发模式,例如周期性任务或事件驱动任务。而使用 Alarm 机制触发的任务具有更大的灵活性。Alarm 允许在运行时动态地设置和修改任务的触发时间…...

I2C协议
1.简介 IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,半双工通信,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用…...

全栈经验总结(不间断更新)
1.当后端传回来的值为列表套字典[{"id":1,"num":"1"},{"id":2"num":"3"}],如果要在vue3里面渲染图片,可以这样操作 <el-form-item label"图片:"><el-uploa…...

什么是恶意代码?
前言:本文旨在分享交流技术,在这里对恶意代码进行全面的介绍和讲解 目录 一.什么是恶意代码 二.恶意代码的发展史 三.恶意代码的相关定义 四.恶意代码攻击机制 PE病毒 PE文件的格式 脚本病毒 脚本文件隐藏方法 宏病毒 浏览器恶意代码 U盘病毒 …...

HCL模拟器选路实验案例
此选路题目选自职业院校技能竞赛中的一道题比较考验思路,适合于参加新华三杯大赛以及网络专业的同学,当做练习题目进行解题 题目 1.S1、S2、R1、R2运行ospf进程100,区域0,R1、R2、R3、R4、R5运行ospf进程200&#…...

toluaframework中C#怎么调用Lua的方法以及无GC方法
toluaframework中C#怎么调用Lua的方法 问题Util.CallMethodLuaManager.CallFunctionLuaFunction.LazyCall 解决方案LuaFunction脚本无GC消耗的调用 用法总结 问题 用过luaframework框架的人应该都知道框架提供了Util的工具类,工具类提供了一个方法就是Util.CallMet…...

安装pandas报错
报错信息: C:\Users\Jordan>pip install pandas Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple/ Collecting pandasUsing cached https://pypi.tuna.tsinghua.edu.cn/packages/3a/6e/6c9c197ec2da861ea8c9c6848f0f887b7563f16e607bc6a35506af6…...

总有一天,你一定会很棒
晚上从一个大商场吃完饭出来,看到两个垂头丧气的男孩,他们坐在商场门口的户外台阶上,低着头,不停的搓着手,看不见他们的脸,只能看见他们不说话。在他们的面前,是一个年级大约25岁左右的女孩子&a…...

带你深入了解队列(c/cpp双版本模拟实现)
目录 一.队列的概念及结构 二.队列的实现 2.1队列的结构 2.2初始化队列 2.3队尾入队列 2.4队头出队列 2.5获取队列头部元素 2.6获取队列队尾元素 2.7获取队列中有效元素个数 2.8检测队列是否为空 2.9销毁队列 三.C 版本模拟实现队列 一.队列的概念及结构 队列…...

接口自动化测试实操
实现思路 使用excel管理用例用例信息,requests模块发送http请求,实现了记录日志,邮件发送测试报告的功能 目录结构如下: 下面直接上代码: 统筹脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24…...

Virtual DOM
目录 Virtual DOM 前言 用法 代码 理解 Virtual DOM的工作原理: 为什么使用Virtual DOM? 哪些库/框架使用Virtual DOM? 总结 Virtual DOM(虚拟DOM)是一种编程概念,它是对真实DOM的轻量级抽象表示。在前端开发中&#x…...

数据结构与算法-二叉树的遍历
🌞 “少年没有乌托邦,心向远方自明朗!” 二叉树 🎈1.二叉树的遍历🔭1.1先序遍历🔭1.2中序遍历🔭1.3后序遍历🔭1.4层次遍历🔭1.5二叉树遍历的递归算法📝1.5.1先…...

Qt之普通项目如何生成DLL(含源码+注释)
文章目录 一、示例图二、普通项目需要改造的内容三、源码(创建了一个TestDLL的项目,更改内容主要在pro文件和maindow.h文件)TestDLL.promainwindow.hmainwindow.cppmainwindow.ui 总结 一、示例图 使用不同的编译模式编译,会在对…...