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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL索引的原理和SQL优化策略

1. 索引 在InnoDB存储引擎中&#xff0c;索引分为聚簇索引和辅助索引两种类型。 聚簇索引是指基于表的主键构建的索引&#xff0c;它决定了表中数据的物理存储顺序。也就是说&#xff0c;聚簇索引中的键值按照主键的顺序来排序&#xff0c;并且每个叶子节点存储的是整个表行的…

关于数组中相邻元素的合并处理方法总结

这两天在开发需求的过程中&#xff0c;需要处理一个数组数据&#xff0c;对相邻元素的具有相同的点合并元素里面的数组。 我们先看一下处理的数组是什么样的。 let array [{name: 数据来源1,list: [{dataCode: 12,dataName: 照片,dataSort: 20,fileList: []}]}, {name: 数据来…

React18-模拟列表数据实现基础表格功能

文章目录 分页功能分页组件有两种接口参数分页类型用户列表参数类型 模拟列表数据分页触发方式实现目录 分页功能 分页组件有两种 table组件自带分页 <TableborderedrowKey"userId"rowSelection{{ type: checkbox }}pagination{{position: [bottomRight],pageSi…

python 实现 macOS状态栏 网速实时显示

安装依赖包&#xff1a; pip install pillow psutil rumpsnetSpeedApp.py from PIL import Image, ImageDraw, ImageFont import psutil import rumpsclass NetSpeedApp(rumps.App):def __init__(self):super(NetSpeedApp, self).__init__("NetSpeed")self.titlese…

【javase】——类和对象

莫道桑榆晚&#xff0c;为霞尚满天。文章目录 面向对象的初步认识面向对象与面向过程什么是面向对象 类的定义和使用类的定义格式 类的实例化什么是实例化类和对象的使用 this引用什么是this引用this 引用的特性。 对象的构造以及初始化如何初始化对象构造方法首先第一&#xf…

喝汽水问题

答案&#xff1a; #include <stdio.h> int main() {int num 0; //可以喝汽水的次数int mon 20; //钱int cup 0; //瓶子数for (mon 20; mon > 0; mon--) //每次花1元钱买汽水喝{num; //可以喝汽水的次数加1cup; //瓶子数加1if (cup 2) //如果瓶子…

Common Mistakes in German

Comman Mistakes in German 1, Haus oder Hause2, ja nein oder doch(1) Positive Fragen(2) Negative Fragen 1, Haus oder Hause 2, ja nein oder doch (1) Positive Fragen (2) Negative Fragen kein / nicht P3

MySQL 可重复读隔离级别,完全解决幻读了吗?

文章目录 前言一、什么是幻读&#xff1f;二、快照读是如何避免幻读的&#xff1f;三、当前读是如何避免幻读的&#xff1f;四、幻读被完全解决了吗&#xff1f;场景1场景2 总结 前言 MySQL InnoDB 引擎的默认隔离级别虽然是「可重复读」&#xff0c;但是它很大程度上避免幻读…

qt内存自动释放的两种情况

qt内存管理机制 QObject的parent 我们时常能看到QWidget或者其他的控件的构造函数中有一项参数parent&#xff0c;默认值都为NULL&#xff0c;例如&#xff1a; QLineEdit(const QString &contents, QWidget *parent nullptr); QWidget(QWidget *parent nullptr, Qt::…

新火种AI|哄哄大模型的火爆,给了普通人AI创业破局的关键

作者&#xff1a;一号 编辑&#xff1a;美美 人们似乎更喜欢把AI当做玩具&#xff0c;而非工具。 近日&#xff0c;一款名为哄哄模拟器的AI原生应用火了&#xff0c;一天之内就吸引了60万用户。 哄哄模拟器设置了多种情侣吵架场景&#xff0c;无论你是男是女&#xff0c;都…

【甲方安全建设】DevOps初体验

文章目录 前言传统的开发方式&#xff1a;Docker-解决环境问题 DevOps-CI/CD走向流水线Jenkins工作流程Git拉取代码Maven构建打包通过SSH连接后端服务器 实现效果 DevSecOps-安全赋能关于安全平台漏洞扫描漏洞预警TODO 前言 临近春节&#xff0c;笔者经过半年北漂&#xff0c;…

基于Springboot的社区疫情防控平台

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 一、项目简介 以往的社区疫情防控管理…

FullStack之Django(2)模型和后台

FullStack之Django(2)模型和后台 author: Once Day date:2022年2月13日/2024年1月31日 漫漫长路&#xff0c;才刚刚开始… 全系列文档请查看专栏: FullStack开发_Once_day的博客-CSDN博客Django开发_Once_day的博客-CSDN博客 参考文档: 编写你的第一个 Django 应用&#…

第三百零一回

文章目录 1. 概念介绍2. 实现方法2.1 obscureText属性2.2 decoration属性 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何实现倒计时功能"相关的内容&#xff0c;本章回中将介绍如何实现密码输入框.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍…

配置IPv6静态路由

1、静态路由简介 静态路由是一种需要管理员手工配置的特殊路由。 静态路由在不同网络环境中有不同的目的&#xff1a; 当网络结构比较简单时&#xff0c;只需配置静态路由就可以使网络正常工作。 在复杂网络环境中&#xff0c;配置静态路由可以改进网络的性能&#xff0c;并…

SpringBoot拉取高德行政区域数据

SpringBoot拉取高德行政区域数据 一、账号申请 1.整体流程 行政区域文档&#xff1a;https://lbs.amap.com/api/webservice/guide/api/district 整体流程可参考&#xff1a;https://lbs.amap.com/api/webservice/guide/create-project/get-key 2.注册账号 注册地址&#…

揭秘2023年全球软件架构师峰会:引领未来的技术潮流与PPT宝藏!

随着科技的不断进步和创新&#xff0c;全球软件架构师峰会&#xff08;ArchSummit深圳站&#xff09;作为国际知名的技术交流盛会&#xff0c;再次吸引了全球顶尖的软件架构师和技术领袖齐聚一堂。 本次峰会不仅展示了最前沿的技术动态&#xff0c;更为参与者带来了极具价值的…

202415读书笔记|《鲸鱼安慰了大海》——我不知道你爱不爱我 湖水想被青山拥在怀里

202415读书笔记|《鲸鱼安慰了大海》——我不知道你爱不爱我 湖水想被青山拥在怀里 辑一 我们一起站在山坡上开花辑二 野花唱歌给自己听辑三 星空给我留了位置后记 《鲸鱼安慰了大海》作者燕七&#xff0c;是在一个关注的友友那里知道的这本书&#xff0c;决定读下去&#xff0c…

C++(17.5)——list模拟实现扩展

在上篇文章中&#xff0c;实现了的大部分功能以及部分迭代器。本片文章将对剩下的功能进行补充。 1. const迭代器&#xff1a; 对于上篇文章中实现的迭代器只能使用于非类型的对象。对于类型的遍历&#xff0c;则需要额外编写类型的迭代器。例如对于下面的场景&#xff1a; …

Yolo v8 入门学习之采用 coco128 数据集进行图片检测测试

示例入门代码 from ultralytics import YOLO import cv2 import matplotlib.pyplot as plt import matplotlib.image as mpimgdef test():# Create a new YOLO model from scratchmodel YOLO(yolov8n.yaml)# Load a pretrained YOLO model (recommended for training)model …