NTRU 加密方案

news2024/11/28 20:54:17

参考文献:

  1. [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.
  2. [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.
  3. [HS00] Hoffstein J, Silverman J. Optimizations for NTRU[J]. Public-Key Cryptography and Computational Number Theory, De Gruyter Proceedings in Mathematics, 2000: 77-88.
  4. [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' Π

  1. 利用 AONT,把消息转化为 “伪消息” m 1 ′ , ⋯   , m s ′ m_1',\cdots,m_s' m1,,ms
  2. 对于 “伪消息” 简单地用 Π \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

  1. 选取随机数 r r r,计算 G ( r ) G(r) G(r) 作为一次秘钥,编码出 m ′ = m ⊕ G ( r ) m'=m \oplus G(r) m=mG(r)
  2. 计算 H ( m ′ ) H(m') H(m) 作为一次秘钥,编码出 r ′ = r ⊕ H ( m ′ ) r'=r \oplus H(m') r=rH(m)
  3. 消息 m m m 对应的伪消息是 m ′ ∥ r ′ m'\|r' mr(随机数,但是求逆容易)

敌手必须知道 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=mG(r)。只要暴力选取的 m ′ ∥ r ′ m'\|r' mr 中的某一比特不正确,那么获得的结果就是随机乱码。

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,RaR
  • KeyGen:
    1. 采样 f ← R f f \gets R_f fRf g ← R g g \gets R_g gRg
    2. 预计算并存储 f q − 1 ( m o d q ) f_q^{-1} \pmod{q} fq1(modq) f p − 1 ( m o d p ) f_p^{-1} \pmod{p} fp1(modp)
    3. 计算 h = p ⋅ g ⋅ f q − 1 ( m o d q ) h = p \cdot g \cdot f_q^{-1} \pmod q h=pgfq1(modq),它在 R q R_q Rq 中统计均匀
    4. 私钥 f f f,公钥 h h h
  • Enc:给定消息 m ∈ R m m \in R_m mRm
    1. 采样 r ← R r r \gets R_r rRr
    2. 输出 e = r ⋅ h + m ( m o d q ) e=r \cdot h + m \pmod q e=rh+m(modq),它是 R q R_q Rq 中均匀的
  • Dec:给定密文 e ∈ R / q R e \in R/qR eR/qR
    1. 计算 a ≡ f ⋅ e ( m o d q ) a \equiv f \cdot e \pmod q afe(modq) 使得 a ∈ R a a \in R_a aRa
    2. 输出 f p − 1 ⋅ a ( m o d p ) f_p^{-1} \cdot a \pmod p fp1a(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 fe=prg+fmRq

只要它的规模小于 q q q,那么就可以用 R q R_q Rq 模拟出正确的 p ⋅ r ⋅ g + f ⋅ m ∈ R p \cdot r \cdot g + f \cdot m \in R prg+fmR,进而可以在 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:=imaxfiiminfi

一般地,选取 R = Z [ x ] / ( x N − 1 ) R=\mathbb Z[x]/(x^N-1) R=Z[x]/(xN1) 是卷积多项式环,设置 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 prg+fm 几乎总是窄的。

未进行效率优化的 C 实现,速度比 RSA 快得多:

在这里插入图片描述

Optimization

[HS00] 给出了 NTRU 加密方案的优化:提升安全性、提高计算效率

CCA 安全性

为了抵御 CCA 攻击,我们使用 FO 转换。为了抵御字典攻击,我们使用 AONT 模式。[HS00] 组合了两者。

加密:

  1. 输入明文 M = M 1 ∥ M 2 M=M_1\|M_2 M=M1M2,随机采样 R = R 1 ∥ R 2 R=R_1\|R_2 R=R1R2
  2. 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=(M1R1)H1(M2R2) m 2 = ( M 2 ∥ R 2 ) ⊕ H 2 ( m 1 ) m_2 = (M_2\|R_2) \oplus H_2(m_1) m2=(M2R2)H2(m1),获得 “伪消息” m = m 1 ∥ m 2 m=m_1\|m_2 m=m1m2
  3. G G G 是哈希函数(用于 FO),计算随机带 r = G ( M ∥ R ) r=G(M\|R) r=G(MR)
  4. 输出密文 e = E n c ( m ; r ) e = Enc(m;r) e=Enc(m;r)

解密:

  1. 解密获得 m = D e c ( e ) m=Dec(e) m=Dec(e)
  2. m = m 1 ∥ m 2 m=m_1\|m_2 m=m1m2 中解码出消息 M M M 和随机数 R R R
  3. 重新计算随机带 r = G ( M ∥ R ) r=G(M\|R) r=G(MR)
  4. 检查 e − m = r ⋅ h e-m = r \cdot h em=rh 是否成立(可以只检查少量的系数
  5. 如果检查通过,则输出明文 M M M

容易求逆的模数

NTRU 的主要开销:秘钥生成过程的 f q − 1 f_q^{-1} fq1 f p − 1 f_p^{-1} fp1,加密过程的 r ⋅ h ( m o d q ) r \cdot h \pmod q rh(modq),解密过程的 f ⋅ e ( m o d q ) f \cdot e \pmod q fe(modq) f p − 1 ⋅ a ( m o d p ) f_p^{-1} \cdot a \pmod p fp1a(modp)

如果选取
f = p ⋅ f ′ + 1 ,    f ′ ∈ R f = p \cdot f' + 1,\,\, f' \in R f=pf+1,fR

它满足 f = f p − 1 = 1 ( m o d p ) f = f_p^{-1} = 1 \pmod p f=fp1=1(modp),解密过程为
f ⋅ e = m + p ⋅ ( g ⋅ r + m ⋅ f ′ ) f \cdot e = m + p \cdot (g \cdot r + m \cdot f') fe=m+p(gr+mf)

噪声项 p ⋅ ( g ⋅ r + m ⋅ f ′ ) p \cdot (g \cdot r + m \cdot f') p(gr+mf) 只要不超过 q q q,那么直接计算
m = [ f ⋅ e ] q ( m o d p ) m = [f \cdot e]_q \pmod p m=[fe]q(modp)

就得到了正确的明文。

多项式模数

在计算机中设置 q = 2 k q=2^k q=2k 时可以快速实现模约简(比特串截断),其他类型的模约简会慢得多(除法)。但是,此时的 p p p 需要与 q q q 互素,那么 p ≥ 3 p \ge 3 p3 是奇数,它的范数过大了,导致噪声项容易越界导致解密错误。

实际上,我们只要求 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,xN1)=(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. 可以验证
    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)(XN12XN2++2N1)(XN1)1282N1

    从而 ( p , q ) = 1 (p,q)=1 (p,q)=1 互素

  2. 存在同构 R p → Z 2 N + 1 R_p \to \mathbb Z_{2^N+1} RpZ2N+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 足够大

  3. 对于二元系数的多项式子集 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} RmRpZ2N+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)N1=(2N+11)/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)N2=(2N2)/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)N1,将它转换为某个 “小” 多项式 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]/(xN1,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+1a(x)=b(x)Rp

  • 度数不大: deg ⁡ b ( x ) ≤ N − 1 \deg b(x) \le N-1 degb(x)N1

  • 系数不大:系数的取值为 { 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++xN1

[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=0N1aixi,主循环至多执行 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 rh 的复杂度为 O ( d N ) O(dN) O(dN),它包含了 ( N − 1 d − 1 ) {N-1 \choose d-1} (d1N1) 个元素。

如果我们设置随机带 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 dd1d2 依旧有充足的熵,
r ⋅ h = r 1 ⋅ ( r 2 ⋅ h ) r \cdot h = r_1 \cdot (r_2 \cdot h) rh=r1(r2h)

多项式乘法的复杂度仅仅为 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(f1f2+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=f1f2+f3 之后,才能判断它是否是一个合法秘钥。解密运算
f ⋅ e = e + p e f 1 f 2 + p e f 3 f \cdot e = e+pef_1f_2 + pef_3 fe=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 问题

在这里插入图片描述

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

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

相关文章

云安全-云原生技术架构(Docker逃逸技术-特权与危险挂载)

0x00 云原生技术-docker docker容器和虚拟机的对比:前者是将运行环境打包,封装一个环境。后者是将整个系统打包,封装一个系统。在操作使用上来说各有利弊。 0x01 docker容器的三种逃逸类型 特权模式启动(不安全的启动方式&…

Qt5.15:MinGW64位编译Oracle 19c数据库驱动及代码测试 - 安装时没有选Sources处理办法

文章目录 0 代码仓库1 环境以及条件说明2 准备一:下载Oracle 19c驱动,需要下载两个包,注意分x86和x642.1 32位2.2 64位2.3 新建目录并解压缩2.4 记录路径2.4.1 x86需要的路径2.4.2 x64需要的路径 3 准备二:下载Sources源代码的两种…

毅速丨金属3D打印能替代传统制造吗?

金属3D打印技术已经逐渐被很多行业认可和应用,但是目前,金属3D打印多数被作为传统制造技术的一种补充,暂时还不能完全替代传统制造。 金属3D打印使用的是金属粉末进行选择性激光烧结,打印时在成型缸里铺上金属粉末,打印…

【刷题宝典NO.1】

Nim游戏 https://leetcode.cn/problems/nim-game/description/ 你和你的朋友,两个人一起玩 Nim 游戏: 桌子上有一堆石头。 你们轮流进行自己的回合, 你作为先手 。 每一回合,轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人…

替换所有的问号

这篇也是凑数的 哈哈.... 稍后会整合到算法通关第三关白银挑战 . 描述 : 给你一个仅包含小写英文字母和 ? 字符的字符串 s,请你将所有的 ? 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。 注意 : 不能 修改非 ? 字符 . 题目 : …

分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测

分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测 目录 分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双…

【计算机视觉】3D视觉

文章目录 一、基本问题二、三个坐标系 X w \boldsymbol{X}_w Xw​到 X c \boldsymbol{X}_c Xc​的转换 X c \boldsymbol{X}_c Xc​到 x i \boldsymbol{x}_i xi​的转换投影矩阵尺度模糊问题 三、相机标定四、立体视觉 我的《计算机视觉》系列参考UC Berkeley的CS180课程&#x…

JDK21下载和安装

说明 本文介绍 JDK21(Oracle版)的下载和安装。 下载 Oracle官网JDK21下载页面 根据操作系统的类型,下载相应的版本。本文下载的是Windows64位的安装版。 下载页面示例 安装包示例 安装 双击安装包,开始安装。 把路径改为自定…

【数据结构】数组和字符串(八):稀疏矩阵的链接存储:十字链表的创建、插入元素、遍历打印(按行、按列、打印矩阵)、销毁

文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储b~c. 三角、对称矩阵的压缩存储d. 稀疏矩阵的压缩存储——三元组表4.2.3三元组表的转置、加法、乘法、操作4.2.4十字链表0. 十字链表结构1. 创建2. 销毁3. 插入4. 打印矩阵形式5. 按行打印6.按列打…

京东平台数据分析(京东销量):2023年9月京东吸尘器行业品牌销售排行榜

鲸参谋监测的京东平台9月份吸尘器市场销售数据已出炉! 根据鲸参谋电商数据分析平台的相关数据显示,今年9月,京东吸尘器的销量为19万,环比下滑约12%,同比下滑约25%;销售额为1.2亿,环比下滑约11%&…

刀具磨损状态识别(Python代码,MSCNN_LSTM_Attention模型,初期磨损、正常磨损和急剧磨损分类,解压缩直接运行)

1.运行效果:刀具磨损状态识别(Python代码,MSCNN_LSTM_Attention模型,初期磨损、正常磨损和急剧磨损)_哔哩哔哩_bilibili 环境库: NumPy 版本: 1.19.4 Pandas 版本: 0.23.4 Matplotlib 版本: 2.2.3 Keras …

【Qt之控件QTreeView】设置单元格高度、设置图标尺寸

设置列宽 设置高度 自定义代理 继承QItemDelegate,实现sizeHint ()方法,设置自定义委托。 class itemDelegate : public QItemDelegate {Q_OBJECTpublic:explicit itemDelegate(QObject *parent 0) : QItemDelegate(parent){}~itemDelegate(){}virtua…

策略路由和路由策略

目录 策略路由 路由策略 策略路由和路由策略 策略路由 Step1:配置ACL,匹配流量 acl number 2010 rule 10 permit source 192.168.10.0 0.0.0.255 acl number 2020 rule 10 permit source 192.168.20.0 0.0.0.255 Step2:流分类traffic classifier jiaoxue //匹配…

Navicat for MySQL 视图创建使用方法

创建视图步骤: 点击新建;选择视图;点击视图创建工具;可以在左侧拖拽表到工作区;选择表字段进行连线

二维码智慧门牌管理系统升级,解决地址要素挂接难题!

文章目录 前言一、传统问题和新解决方案二、多样化应用三、实际案例 前言 随着科技的不断发展,智能化管理已经深入到各行各业。在地址要素采集过程中,如何实现要素之间的挂接关系,是智慧门牌管理系统面临的重要挑战。本文将为您揭秘一种升级…

【错误解决方案】ModuleNotFoundError: No module named ‘cPickle‘

1. 错误提示 在python程序中试图导入一个名为cPickle的模块,但Python提示找不到这个模块。 错误提示:ModuleNotFoundError: No module named cPickle 2. 解决方案 实际上,cPickle是Python的pickle模块的一个C语言实现,通常用于…

【ROS入门】机器人导航(仿真)——导航实现

文章结构 建图 SLAM编写gmapping节点相关launch文件执行 地图服务 map_server地图保存节点 map_server地图服务 map_server 定位 amcl编写amcl节点相关的launch文件编写测试launch文件执行 路径规划 move_basemove_base与代价地图碰撞算法 move_base使用launch文件配置文件laun…

Selenium自动测试框架

selenium3 selenium元素的定位css 选择器Xpath 操作测试对象 API添加等待浏览器的操作键盘操作鼠标操作定位一组元素下拉框弹窗上传文件 <dependencies><!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --><dependency><…

phar反序列化学习

PHP反序列化常见的是使用unserilize()进行反序列化&#xff0c;除此之外还有其它的反序列化方法&#xff0c;不需要用到unserilize()。就是用到phar反序列化。 Phar phar文件 Phar是将php文件打包而成的一种压缩文档&#xff0c;类似于Java中的jar包。它有一个特性就是phar文…

2024级199管理类联考之写作

小作文(论证有效性分析-600字/30分/20-25分钟) 核心原理 找到明显的论证逻辑错误(找到4个即可得16分),然后分析前提推不出结论(14分)(反驳别人) 论证指的是前提推结论 前提引词&#xff1a;因为结论引词&#xff1a;所以,因此,由此可得等有些论证没有明显的引词,需要自行判断怎…