7.2、子集求和问题与背包密码系统

7.2、子集求和问题与背包密码系统

一、数学描述

1.1、第一种描述

20 世纪 70 年代末,默克尔和赫尔曼首次尝试将密码系统建立在一个 NP-完全问题上。他们使用了以下数学问题的一个版本,该问题是对经典knapsack问题的概括。
子集和问题 假设你有一个正整数列表 ( M 1 , M 2 , … , M n ) 和另一个整数 s , 找到列表中元素的一个子集,其和是 s ( 你可以假设至少有一个这样的子集 ) 。 子集和问题 \\ 假设你有一个正整数列表(M_{1},M_{2},…,M_{n})和另一个整数s,\\ 找到列表中元素的一个子集,其和是s(你可以假设至少有一个这样的子集)。 子集和问题假设你有一个正整数列表(M1,M2Mn)和另一个整数s找到列表中元素的一个子集,其和是s(你可以假设至少有一个这样的子集)

1.2、另一种描述

这是描述子集和问题的另一种方式。

正整数列表: M = ( M 1 , M 2 , . . . , M n ) M=(M_{1},M_{2},...,M_{n}) M=(M1,M2,...,Mn)是公开的。Bob选择一个秘密二进制向量 x ⃗ = ( x 1 , x 2 , . . . , x n ) \vec{x}=(x_{1},x_{2},...,x_{n}) x =(x1,x2,...,xn),即,每个 x i x_{i} xi可以是0或1。Bob计算总和: S = ∑ i = 1 n x i M i S=\sum_{i=1}^{n}x_{i}M_{i} S=i=1nxiMi,并将 S 发送给Alice。

子集和问题要求Alice找到原始向量 x ⃗ \vec{x} x 或另一个二进制向量,给出相同的和。请注意,向量 x ⃗ \vec{x} x 告诉了Alice要将哪些 M i M_{i} Mi 包括在 S 中,因为只有当 x i = 1 x_{i}=1 xi=1 时,所有的 M i M_{i} Mi 才在总和 S 中。因此,指定二进制向量 x ⃗ \vec{x} x 等于指定 M 的一个子集。

很明显,Alice可以通过检查所有长度为n的 2 n 2^{n} 2n个二进制向量来找到 x ⃗ \vec{x} x ​。一个简单的碰撞算法允许Alice将指数减半。

二、可以减半的简单碰撞算法

命题 7.3. 设 M = ( M 1 , M 2 , . . . , M n ) M=(M_{1},M_{2},...,M_{n}) M=(M1,M2,...,Mn),设 (M,S) 是一个子集问题。对于所有整数集 I 和 J满足以下条件:
I ⊂ { i : 1 ≤ i ≤ 1 2 n } a n d J ⊂ { j : 1 2 n < j ≤ n } I \subset \{i:1\le i\le \frac{1}{2}n \} \qquad and \qquad J\subset \{j:\frac{1}{2}n< j\le n\} I{i:1i21n}andJ{j:21n<jn}
计算并列出这些值
A I = ∑ i ∈ I M i a n d B J = S − ∑ j ∈ J M j A_{I}=\sum_{i \in I}^{}M_{i} \qquad and \qquad B_{J}=S-\sum_{j \in J}^{}M_{j} AI=iIMiandBJ=SjJMj
然后这些列包含一对满足 A I 0 = B J 0 A_{I_{0}}=B_{J_{0}} AI0=BJ0的集合 I 0 I_{0} I0 J 0 J_{0} J0,这些集合 I 0 I_{0} I0 J 0 J_{0} J0​给出了子集和问题的一个解,
S = ∑ i ∈ I 0 M i + ∑ j ∈ J 0 M j S=\sum_{i \in I_{0}}^{}M_{i}+\sum_{j \in J_{0}}^{}M_{j} S=iI0Mi+jJ0Mj
每个列表中的条目数不超过 2 n / 2 2^{n/2} 2n/2,因此算法的运行时间为 O ( 2 n / 2 + ϵ ) O(2^{n/2+\epsilon }) O(2n/2+ϵ),其中 ϵ \epsilon ϵ是一个小值,用于对列表进行排序和比较。(类似于算法分析中的分治思想,将一个整体问题,分成两个子问题,通过不停的分割,并通过解决子问题一层层递归往上,从而解决整体大问题)

证据。只需注意,如果 x ⃗ \vec{x} x 是二元向量, x ⃗ \vec{x} x 给出了给定子集和问题的解,那么我们可以把解写成
∑ 1 ≤ i ≤ 1 2 n x i M i = S − ∑ 1 2 n ≤ i ≤ n x i M i \sum_{1 \le i \le \frac{1}{2}n}^{}x_{i}M_{i}=S- \sum_{\frac{1}{2}n \le i \le n}^{}x_{i}M_{i} 1i21nxiMi=S21ninxiMi

子集I和J的个数是 O ( 2 n / 2 ) O(2^{n/2}) O(2n/2)​,因为它们是n/2阶集合的子集。

三、背包问题应用于密码系统

3.1、密码思想

如果n很大,那么一般来说,它是很难解决一个随机实例的子集问题。然而,假设Alice掌握了一些关于 M 的秘密知识或陷阱门信息,使她能够保证解 x 是唯一的,并且能够轻松地找到 x。这样,Alice就能把子集和问题当作公钥密码系统来使用。Bob的明文是向量 x,他的加密信息是总和 S = ∑ x i M i S=\sum x_{i}M_{i} S=xiMi,只有Alice才能通过 S 的知识轻松恢复 x。

但是Alice能用什么鬼鬼祟祟的把戏来确保她能解决这个特定的子集和问题,而别人却不能?一种可能是使用一个非常容易解决的子集问题,但以某种方式将这个简单的解决方案隐藏起来,不让其他人知道。

3.2、密码系统前提

定义。一个递增整数序列是一个正整数列表 r = ( r 1 , r 2 , . . . , r n ) r=(r_{1},r_{2},...,r_{n}) r=(r1,r2,...,rn),其属性是
r i + 1 ≥ 2 r i 对所有 1 ≤ i ≤ n − 1 r_{i+1}\ge 2r_{i} \qquad 对所有 \qquad 1\le i \le n-1 ri+12ri对所有1in1
引理7.4。设 r = ( r 1 , r 2 , . . . , r n ) r=(r_{1},r_{2},...,r_{n}) r=(r1,r2,...,rn)是一个超递增序列。有
r k > r k − 1 + . . . + r 2 + r 1 对于所有 2 ≤ k ≤ n r_{k}>r_{k-1}+...+r_{2}+r_{1} \qquad 对于所有2 \le k \le n rk>rk1+...+r2+r1对于所有2kn
证据。我们用k的归纳法给出了一个证明。当k =2时,我们有 r 2 ≥ 2 r 1 > r 1 r_{2}\ge 2r_{1}>r_{1} r22r1>r1​,这就开始了归纳法。现在假设这个引理在2≤k< n的情况下是成立的。然后首先使用超递增性,然后是归纳假设,我们发现
r k + 1 ≥ 2 r k = r k + r k > r k + ( r k − 1 + . . . + r 2 + r 1 ) r_{k+1} \ge 2r_{k}=r_{k}+r_{k}>r_{k}+(r_{k-1}+...+r_{2}+r_{1}) rk+12rk=rk+rk>rk+(rk1+...+r2+r1)
这表明引理对于k +1也是成立的。

如果 M 中的整数构成一个超递增序列,则子集和问题非常容易求解。
求解方法如下:
在这里插入图片描述

证明。假设 M 是一个超递增序列,意味着 M i + 1 ≥ 2 M i M_{i+1} \ge 2M_{i} Mi+12Mi。我们已知存在一个解,为了区别于算法产生的向量x,我们称其为实际解y。因此我们假设y·M = S,我们需要证明x = y。

我们用向下归纳法证明,当1≤k≤n时, x k = y k x_{k}=y_{k} xk=yk。我们的归纳假设是,对于所有 k< i ≤ n,xi = yi,我们需要证明 xk = yk。(注意,我们允许 k = n,在这种情况下,我们的归纳假设是空的。)假设的意思是,当我们执行从 i = n 到 i = k +1 的算法时,每个阶段都有 xi = yi。所以在i = k执行循环之前,S的值被简化为:
在这里插入图片描述

现在考虑当我们执行循环i = k时会发生什么。有两种可能:
在这里插入图片描述

(请注意,在情况(2)中,我们利用 引理 7.4 推导出 M k − 1 + . . . + M 1 M_{k-1}+...+M_{1} Mk1+...+M1​ 严格小于 Mk)。在这两种情况下,我们都得到 xk = yk,这就完成了 x = y 的证明。此外,它还表明解是唯一的,因为我们已经证明任何解都与算法的输出一致,而算法的本质是对任何给定的输入 S 返回唯一的向量 x。

3.3、背包密码系统

Merkle和Hellman提出了一个基于超增长子集和问题的公钥密码系统,该问题用同余来伪装。为了创建公钥/私钥对,Alice从一个超递增序列 r = ( r 1 , r 2 , . . . , r n ) r=(r_{1},r_{2},...,r_{n}) r=(r1,r2,...,rn)开始。她还选择了满足以下条件的两个大秘密整数 A 和 B:
B > 2 r n a n d g c d ( A , B ) = 1 B>2r_{n} \qquad and \qquad gcd(A,B)=1 B>2rnandgcd(A,B)=1
Alice创建了一个新的序列M,它不是通过设置来超增的:
M i ≡ A r i ( m o d B ) w i t h 0 ≤ M i ≤ B M_{i} \equiv Ar_{i} \pmod{B} \qquad with \qquad 0 \le M_{i} \le B MiAri(modB)with0MiB
序列M是Alice的公钥。

为了加密一条消息,Bob选择一个纯文本x,它是一个二进制向量,计算后将密文发送给Alice:
S = x ⋅ M = ∑ i = 1 n x i M i S=x\cdot M=\sum_{i=1}^{n}x_{i}M_{i} S=xM=i=1nxiMi
Alice通过第一次计算解密S
S ′ ≡ A − 1 S ( m o d B ) w i t h 0 ≤ S ′ < B S^{'} \equiv A^{-1}S \pmod B \qquad with0 \le S^{'}<B SA1S(modB)with0S<B
然后,Alice利用超递增序列 r 和命题 7.5 中描述的快速算法求解 S ′ S^{'} S的子集和问题。

解密之所以有效是因为 S ′ S^{'} S等于:
S ′ ≡ A − 1 S ≡ A − 1 ∑ i = 1 n x i M i ≡ A − 1 ∑ i = 1 n x i A r i ≡ ∑ i = 1 n x i r i ( m o d B ) S^{'} \equiv A^{-1}S \equiv A^{-1}\sum_{i=1}^{n}x_{i}M_{i} \equiv A^{-1}\sum_{i=1}^{n}x_{i}Ar_{i} \equiv \sum_{i=1}^{n}x_{i}r_{i} \pmod B SA1SA1i=1nxiMiA1i=1nxiArii=1nxiri(modB)
假设 B > 2 r n B > 2r_{n} B>2rn,引理7.4告诉Alice:
∑ i = 1 n x i r i ≤ ∑ i = 1 n r i < 2 r n < B \sum_{i=1}^{n}x_{i}r_{i} \le \sum_{i=1}^{n}r_{i}<2r_{n}<B i=1nxirii=1nri<2rn<B
所以通过在0到B - 1的范围内选择 S ′ S^{'} S,她确保了她得到了一个完全相等的 S ′ = ∑ i = 1 n x i r i S^{'}=\sum_{i=1}^{n}x_{i}r_{i} S=i=1nxiri​,而不仅仅是一个全等。

下表总结了Merkle-Hellman密码系统。
在这里插入图片描述

基于伪装子集和问题的密码系统被称为子集和密码系统或背包密码系统。其一般思路是从秘密超增序列开始,使用秘密模线性运算对其进行伪装,然后将伪装序列作为公钥公布。最初的梅克尔和赫尔曼系统建议对 Ar (mod B) 的条目进行秘密排列,作为额外的安全保护层。后来的版本由许多人提出,涉及多个不同模量的多重乘法和还原。有关背包密码系统的精彩概览,请参阅 Odlyzko 的文章。

注释 7.8. 关于背包系统,必须考虑的一个重要问题是,获得理想的安全等级所需的各种参数的大小。有 2 n 2^{n} 2n 个二进制向量 x = ( x 1 , x 2 , . . . , x n ) x=(x_{1},x_{2},...,x_{n}) x=(x1,x2,...,xn),我们在命题 7.3 中已经看到有一种碰撞算法,因此有可能在 O ( 2 n / 2 ) O(2^{n/2}) O(2n/2)次操作中破解背包密码系统。因此,为了获得 2 k 2^{k} 2k数量级的安全性,必须使 n> 2k,例如, 2 80 2^{80} 280​的安全性要求 n> 160。不过,尽管这提供了对抗碰撞攻击的安全性,但并不排除存在其他更有效的攻击,正如我们将在第 7.14.2 节中看到的,这些攻击确实存在。(另见注释 7.10)。

注释 7.9. 假设我们已经选定了 n 的值,那么其他参数必须多大呢?事实证明,如果 r1 太小,就很容易受到攻击,因此我们必须坚持 r1 > 2n。序列的超递增性质意味着
r n > 2 r n − 1 > 4 r n − 2 > . . . > 2 n r 1 > 2 2 n r_{n}>2r_{n-1}>4r_{n-2}>...>2^{n}r_{1}>2^{2n} rn>2rn1>4rn2>...>2nr1>22n
那么 B > 2 r n = 2 2 n + 1 B>2r_{n}=2^{2n+1} B>2rn=22n+1,因此我们发现公钥中的条目 Mi 和密文 S 满足以下条件:
M i = O ( 2 2 n ) a n d S = O ( 2 2 n ) M_{i}=O(2^{2n}) \qquad and \qquad S=O(2^{2n}) Mi=O(22n)andS=O(22n)
因此,公钥M是一个由n个整数组成的列表,每个整数大约2n位长,而明文x包含n位信息,密文大约2n位长。请注意,消息扩展比例是2比1。

备注 7.10. 已知解决随机选择子集和问题的最佳算法是碰撞算法的各种版本,如命题 7.3。不幸的是,随机选择子集和问题没有陷阱门,因此不能用来创建密码系统。而事实证明,使用伪装的超增子集和问题可以得到其他更有效的算法。沙米尔、奥德利兹科、拉加里亚斯等人最早的此类攻击使用了各种特别的方法,但在 1985 年著名的 LLL2 格还原论文[77]发表后,人们逐渐发现,基于密码系统的窍门有一个根本性的弱点。粗略地说,如果 n 小于 300 左右,那么格还原就能让攻击者在令人不安的短时间内从密文 S 中恢复出明文 x。因此,一个安全的系统需要 n> 300,在这种情况下,私钥长度大于 2 n 2 2n^{2} 2n2​ = 180000 比特≈176 kB。这是如此之大,以至于使安全的背包系统不切实际。

四、在格密码系统下的背包问题

现在我们简要介绍一下Eva如何用向量重新表述子集和问题。假设她想把 S 写成集合 M = ( m 1 , . . . , m n ) M=(m_{1},...,m_{n}) M=(m1,...,mn)​​的子集和。她的第一步是形成矩阵:
在这里插入图片描述
相关的向量是矩阵(7.4)的行,我们将其标记为:
在这里插入图片描述

就像在第 7.1 节末尾描述的二维示例中一样,Eva关注的是 v1,…, vn+1 的所有整数线性组合的集合:
L = a 1 v 1 + a 2 v 2 + . . . + a n v n : a 1 , a 2 , . . . , a n + 1 ∈ Z L={a_{1}v_{1}+a_{2}v_{2}+...+a_{n}v_{n}:a_{1},a_{2},...,a_{n+1} \in Z} L=a1v1+a2v2+...+anvn:a1,a2,...,an+1Z
集合L是格的另一个例子。

现在假设 x =(x1,…,xn) 是给定子集和问题的解。那么格 L 包含向量:
t = ∑ i = 1 n x i v i − v n + 1 = ( 2 x 1 − 1 , 2 x 2 − 1 , . . . , 2 x n − 1 , 0 ) t=\sum_{i=1}^{n}x_{i}v_{i}-v_{n+1}=(2x_{1}-1,2x_{2}-1,...,2x_{n}-1,0) t=i=1nxivivn+1=(2x11,2x21,...,2xn1,0)
其中t的最后一个坐标是0,因为 S = x 1 m 1 + . . . + x n m n S=x_{1}m_{1}+...+x_{n}m_{n} S=x1m1+...+xnmn

现在我们来看看问题的关键所在。由于 xi 都是 0 或 1, 2 x i − 1 2x_{i}-1 2xi1的值都是±1,所以向量 t 很短, ∥ t ∥ = n \parallel t \parallel =\sqrt{n} t∥=n 。另一方面,我们已经看到 m i = O ( 2 2 n ) m_{i}=O(2^{2n}) mi=O(22n) S = O ( 2 2 n ) S=O(2^{2n}) S=O(22n),所以生成 L 的向量长度都是 ∥ v i ∥ = O ( 2 2 n ) \parallel v_{i} \parallel =O(2^{2n}) vi∥=O(22n)。因此,除了 t 之外,L 不可能包含任何长度小于 n \sqrt{n} n 的非零向量。如果我们假设Eva知道一种能够在格中找到小的非零向量的算法,那么她就能够找到 t,从而恢复明文 x。

在格中寻找短向量的算法称为格还原算法。其中最有名的是我们前面提到的 LLL 算法及其变体,如 LLL-BKZ。本章的其余部分将专门描述格、基于格的密码系统、LLL 算法以及 LLL 的密码应用。关于背包密码系统的更详细分析见第 7.14.2 节;另见例 7.33。

五、我的一些疑问

在3.2节的证明中,得到了关系:
S k = ∑ i = 1 k y i M i 其中 k < i ≤ n S_{k}=\sum_{i=1}^{k}y_{i}M_{i} \qquad 其中k<i \le n Sk=i=1kyiMi其中k<in
进而可以得到:
S k = ∑ i = 1 k y i M i = y k M k + ∑ i = 1 k − 1 y i M i 其中 k < i ≤ n S_{k}=\sum_{i=1}^{k}y_{i}M_{i}=y_{k}M_{k}+\sum_{i=1}^{k-1}y_{i}M_{i} \qquad 其中k<i \le n Sk=i=1kyiMi=ykMk+i=1k1yiMi其中k<in
所以当 y k = 1 y_{k}=1 yk=1时,由于 y i y_{i} yi不总是为1或0,可以得到 S k ≥ M k S_{k} \ge M_{k} SkMk

疑问:但是为什么从以上的推论在可以得到 x k = 1 x_{k}=1 xk=1?

对于 y k = 0 y_{k}=0 yk=0时,同样,中间能够理解 S k ≤ M k − 1 + . . . + M 1 < M k S_{k} \le M_{k-1}+...+M_{1}<M_{k} SkMk1+...+M1<Mk,但为什么可以推断出 x k = 0 x_{k}=0 xk=0

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

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

相关文章

【Midjourney】AI绘画案例(1)龙年吉祥神兽

说明&#xff1a; 1、文中图片版权均为Midjourney所有&#xff0c;请勿用作商业用途。 2、文中图片均经过 Upscale x 4 处理。 3、由于模型原因&#xff0c;某些图片存在暇玼。 1、吉祥神兽——天马&#xff08;独角兽&#xff09; 天马消灾星。 提示词 Prompt: Sky Unicor…

2023强网杯复现

强网先锋 SpeedUp 要求2的27次方的阶乘的逐位之和 在A244060 - OEIS 然后我们将4495662081进行sha256加密 就得到了flag flag{bbdee5c548fddfc76617c562952a3a3b03d423985c095521a8661d248fad3797} MISC easyfuzz 通过尝试输入字符串判断该程序对输入字符的验证规则为9…

Prometheus+grafana配置监控系统

使用docker compose安装 方便拓展, 配置信息都放在在 /docker/prometheus 目录下 1.目录结构如下 . ├── conf │ └── prometheus.yml ├── grafana_data ├── prometheus_data └── prometheus_grafana.yaml2.创建目录文件 mkdir /docker/prometheus &&am…

【unity小技巧】FPS简单的射击换挡瞄准动画控制

文章目录 射击动画控制换弹动画瞄准动画完结 射击动画控制 换弹动画 调用 瞄准动画 问题&#xff1a;瞄准时&#xff0c;但是动画会卡住&#xff0c;不会播放瞄准的待机动画 修改 调用 动画如果太快可以去修改播放速度 播放速度变慢了&#xff0c;可能导致切换待机动画也…

【PyQt】01-PyQt下载

文章目录 前言静态库 一、PyQt是什么&#xff1f;二、安装1.Windows环境下安装安装PyQt5Designer 2.Liunx环境下安装 总结 前言 拜吾师 PyQt5 快速入门 静态库 补充一点知识&#xff1a; Windows&#xff1a; .lib Linux: .a .so(动态库) 简单描述PyQt就是python调用C的Qt文…

《区块链简易速速上手小册》第4章:区块链与加密货币(2024 最新版)

文章目录 4.1 比特币与区块链4.1.1 比特币基础4.1.2 比特币交易的工作流程&#xff1a;4.1.3 拓展案例 1&#xff1a;闪电网络4.1.4 拓展案例 2&#xff1a;比特币ATM 4.2 其他主要加密货币4.2.1 加密货币的多样性4.2.2 以太坊的案例4.2.3 拓展案例 1&#xff1a;非同质化代币&…

郑庆科老师字体正版商用官方授权,字觅网为您提供官方授权渠道

近日,字觅网宣布成为郑庆科老师字体的签约字体品牌,并提供了官方正版商用授权渠道。庆科字体以其独特的风格和设计备受欢迎,现在通过字觅网,用户可以轻松获取该字体的正版商用授权。 用户只需访问庆科字体官网,即可查看庆科字体的详细列表,并选择所需字体进行下载。 在字觅网…

Unity3d Shader篇(一)— 顶点漫反射着色器解析

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、顶点漫反射着色器是什么&#xff1f;1. 顶点漫反射着色器的工作原理 二、编写顶点漫反射着色器1. 定义属性2. 创建 SubShader3. 编写着色器程序段4. 完成顶…

《Pandas 简易速速上手小册》第5章:Pandas 数据合并与重塑(2024 最新版)

文章目录 5.1 数据合并&#xff1a;Concatenate 和 Merge5.1.1 基础知识5.1.2 重点案例&#xff1a;客户订单数据合并5.1.3 拓展案例一&#xff1a;产品目录和销售数据合并5.1.4 拓展案例二&#xff1a;员工信息和部门数据合并 5.2 数据透视和重塑5.2.1 基础知识5.2.2 重点案例…

如何使用Cloudreve搭建私有云盘并发布公网访问无需购买域名服务器

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

路由重定向和别名

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介1. 路由重定向实例场景&#xff1a;路由重定向的应用场景&#xff1a; 2. 路由别名实例场景&#xff1a;路由别名的应用场景&#xff1a; ⭐ 写在最后 ⭐ 专栏简介 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏&…

备战蓝桥杯---数据结构与STL应用(进阶2)

本文将主要围绕有关map的今典应用展开&#xff1a; 下面我用图进行分析&#xff1a; 下面为AC代码&#xff1a; #include<bits/stdc.h> using namespace std; struct Point {int x,y;bool operator < (const Point & r) const {return x < r.x || ( x r.x &a…

Windows IIS服务如何配置并制作web站点结合内网穿透实现公网访问

文章目录 1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户端4.1 连接WebDav服务器4.2 连接成功4.2 连接成功总结&#xff1a; 自己用Windows Server搭建了家用NAS主机&…

【网络】:网络套接字(TCP)

网络套接字&#xff08;TCP&#xff09; 一.编写TCP服务器二.编写Tcp客户端三.多进程四.多线程版本五.线程池版完整源代码六.使用示例 一.编写TCP服务器 1.先搭一个架子 2.创建sockfd domain参数依然是AF_INET(因为是IPV4) type方式选择SOCK_STREAM&#xff08;提供可靠的连接…

从零开始学Linux之chkconfig命令

首先我们要知道Linux系统有以下7种运行级别&#xff0c;分别用0到6数字表示&#xff0c;这里使用红帽6系统做演示 0&#xff1a;关机 1&#xff1a;单用户模式&#xff0c;root用户免密登录&#xff0c;用于系统维护&#xff0c;例如忘记用户密码可以切换到该模式直接使用roo…

查看本地mysql的密码

1.导出链接 在数据库连接工具找到导出链接 导出到桌面即可&#xff0c;注意导出密码 2.复制密码 3.解密 复制如下代码到网址&#xff1a;代码在线运行 - 在线工具 (tool.lu) <?php namespace FatSmallTools; class NavicatPassword {protected $version 0;protected $a…

YOLOv5算法进阶改进(14)— 即插即用的动态卷积之ODConv | 助力涨点

​ 前言:Hello大家好,我是小哥谈。动态卷积(Dynamic Convolution)是一种用于目标检测的卷积神经网络模块,其中ODConv(Object Detection Convolution)是其一种具体实现。动态卷积在传统的卷积操作上引入了动态权重,以适应不同目标的形状和尺度变化。本文将YOLOv5的主干网…

Python实战:使用DrissionPage库爬取拉勾网职位信息

DrissionPage库&#xff0c;号称可以把Selenium按在地上摩擦&#xff01; 常规情况下&#xff0c;我们借助 requests 库爬取不加密的网站&#xff0c;使用 Selenium 库爬取加密的网站。 requests 效率高&#xff0c;但是解密难度大。Selenium 库可以实现网页自动化&#xff0c…

【星海随笔】RYU控制器(一)

Ryu is a component-based software defined networking framework.   Ryu是一个基于组件的软件定义网络框架 Ryu supports various protocols for managing network devices, such as OpenFlow, Netconf, OF-config, etc.   支持管理网络设备的多种协议 About OpenFlow, R…

Redis 布隆过滤器

布隆过滤器 这一篇文章主要是记录布隆过滤器的使用和认识 主要参考了如下的blog https://blog.csdn.net/weixin_42972832/article/details/131211665 他讲的还不错 简单的来说,布隆过滤器,实际上就像是一个集合,拿redis的key来举例来说,布隆过滤器的设置就是去过滤不属于redi…