当前位置: 首页 > news >正文

【11.10】现代密码学1——密码学发展史:密码学概述、安全服务、香农理论、现代密码学

密码学发展史

  • 写在最前面
  • 密码学概述
    • 现代密码学
    • 量子密码学
    • 基本术语
    • 加解密的通信模型
      • 对称加密
      • PKI通信工作流程
    • 古典密码与分析
      • 古代密码的加密
      • 古典密码的分析
  • 安全服务
  • 香农理论
  • 现代密码学
    • 乘积密码方案
    • 代换-置换网络
    • 安全性概念
      • 可证明安全性——规约(*规约证明的方案——会考)
    • 加密方案的定义
    • 完善保密性
    • 语义安全性

写在最前面

参考:密码学发展简史

骆婷老师的《现代密码学(32H)》课程,笔记+查找的资料补充
期末为闭卷考试的形式

密码学概述

密码学早在公元前400多年就已经产生,人类使用密码的历史几乎与使用文字的时间一样长,密码学的发展大致可以分为 3 个阶段:
1949年之前的古典密码学阶段;
1949 年至 1975 年密码学成为科学的分支;
1976年以后对称密钥密码算法得到进一步发展,产生了密码学的新方向—公钥密码学。
1976 年,W.Diffie 和 M.Hellman在发表的文章“密码学的新方向”中首次公开提出了公钥密码( Public-key Cryptography)的概念。公钥密码的提出实现了加密密钥和解密密钥之间的独立,解决了对称密码体制中通信双方必须共享密钥的问题,在密码学界具有划时代的意义。

现代密码学

在密码学的发展史上,公钥密码被认为是一个重大的突破。公钥密码中加密和解密使用不同的密钥,其中,用于加密的叫做公钥,用于解密的为私钥。这种密码的安全性不是建立在秘密性上,而是基于相应数学问题在计算机上的难解性来保证。RSA算法是公钥加密算法中最为广泛应用的一种,它的安全性是建立在大整数素因子分解在计算机上的困难性上的。但随着计算能力的不断增强和因子分解算法的不断改进,特别是量子计算机的发展,公钥密码的安全性也渐渐受到威胁。

1977年,美国麻省理工学院提出第一个公钥加密算法RSA算法,之后ElGamal、椭圆曲线、双线性对等公钥密码相继被提出,密码学真正进入了一个新的发展时期。

一般来说,公钥密码的安全性由相应数学问题在计算机上的难解性来保证
以广为使用的 RSA算法为例,它的安全性是建立在大整数素因子分解在计算机上的困难性,如,对于整数22,我们易于发现它可以分解为2和11两个素数相乘,但对于一个500位的整数,即使采用相应算法,也要很长时间才能完成分解。

量子密码学

但随着计算能力的不断增强和因子分解算法的不断改进,特别是量子计算机的发展,公钥密码安全性也渐渐受到威胁。目前,研究者们开始关注量子密码、格密码等抗量子算法的密码,后量子密码等前沿密码技术逐步成为研究热点。

格密码则利用了数学中的格结构来构建密码系统,具有较强的抗量子特性。
后量子密码学主要利用非对称密码、哈希函数、消息认证码等技术来构建密码系统,这些技术都具有抗量子性质。

量子密码利用了量子力学中的不可克隆性原理保证消息的安全性,这种密码技术被认为是未来密码学发展的一个重要方向。量子密码术是一种新的重要加密方法,它利用单光子的量子性质,借助量子密钥分配协议可实现数据传输的可证性安全。量子密码具有无条件安全的特性(即不存在受拥有足够时间和计算机能力的窃听者攻击的危险),而在实际通信发生之前,不需要交换私钥。

基本术语

  1. 加密 (Encryption)
  2. 解密 (Decryption)
  3. 密钥 (Key)
  4. 对称加密 (Symmetric Encryption)
  5. 非对称加密 (Asymmetric Encryption)
  6. 公钥 (Public Key)
  7. 私钥 (Private Key)
  8. 数字签名 (Digital Signature)
  9. 散列函数 (Hash Function)
  10. 消息认证码 (Message Authentication Code)
  11. 密码强度 (Password Strength)
  12. 随机数生成器 (Random Number Generator)
  13. 密码学安全协议 (Cryptographic Security Protocols)
  14. 密码学攻击 (Cryptographic Attacks)
  15. 可逆密码 (Reversible Cipher)
  16. 不可逆密码 (Irreversible Cipher)
  17. 混淆器 (Confusion)
  18. 扩散器 (Diffusion)
  19. 流密码 (Stream Cipher)
  20. 块密码 (Block Cipher)
  21. 密码协议 (Cryptographic Protocol)

密码学、密码编码学、密码分析学 明文、密文、密钥。加密钥,解密,加密方案

  1. 密码学 (Cryptography): 研究保护信息安全的一门学科,通过加密技术实现信息的保密、完整性和可靠性。

  2. 密码编码学 (Cryptology): 既包括密码学也包括密码分析学,是一门研究加密和解密的科学。

  3. 密码分析学 (Cryptanalysis): 研究破解密码和密码系统弱点的一门学科。

  4. 明文 (Plaintext): 未经加密的原始信息或数据。

  5. 密文 (Ciphertext): 经过加密处理的信息或数据。

  6. 密钥 (Key): 加密和解密的关键,是一组特定的参数或信息,使用正确的密钥才能获得正确的明文。

  7. 加密 (Encryption): 将明文转换为密文的过程。

  8. 解密 (Decryption): 将密文转换为明文的过程。

  9. 加密方案 (Encryption Scheme): 加密和解密的完整流程和方法,包括选择加密算法、密钥生成、加密过程、解密过程等。

分组密码、流密码 对称密码、非对称密码 kerckhoffs假设 唯密文攻击、选择明文攻击、选择密文攻击

密码分析,主要是秘钥的分析

  1. 分组密码(Block cipher):将明文按照一定长度(分组大小)进行分块,对每个分组进行加密,输出密文。

  2. 流密码(Stream cipher):将明文和密钥进行逐位异或(XOR)运算,逐位输出密文。

  3. 对称密码(Symmetric key cryptography):加密和解密使用相同的密钥。

  4. 非对称密码(Asymmetric key cryptography):加密和解密使用不同的密钥,包括公钥和私钥。

  5. Kerckhoffs假设(Kerckhoffs’ principle):密码系统的安全性不依赖于保密算法,而依赖于保密密钥。

在不同攻击能力的情况下,敌手获得信息的情况不一样

  1. 唯密文攻击(Ciphertext-only attack):攻击者只拥有密文,试图通过分析密文来破解加密算法或密钥。

  2. 选择明文攻击(Known-plaintext attack):攻击者拥有明文和密文对,并试图破解加密算法或密钥。

明文攻击是指攻击者拥有加密的数据,但同时也拥有原始的明文数据,并通过比较加密和明文数据的差异来破解加密算法或密钥。
这种攻击方式通常用于简单的加密算法或者使用固定密钥的情况,因为即使密钥很大,但如果算法本身很简单,仍然容易受到明文攻击的影响。

例如:
如果一个加密算法使用的密钥是“123456”,攻击者可以拥有一些原始明文数据和相应的加密数据。攻击者可以在不知道密钥的情况下使用这些数据比较来推断出密钥是“123456”。然后攻击者就可以使用这个密钥来解密任何加密数据,而不需要进一步的破解工作。

  1. 选择密文攻击(Chosen-ciphertext attack):攻击者可以选择一些密文并获得其对应的明文(有条件询问加密机的权限),然后观察输出结果,以此来推断密钥或加密算法。

一个具体的例子是:
攻击者想要获取一条被AES加密的密文,但他并不知道原始明文是什么。他可以通过选择一些自己想要的密文并将其提交给加密系统,然后观察输出结果并记录下来。这些输出结果包括密文本身以及加密使用的密钥。通过对这些信息的搜集和分析,攻击者可以试图推断出加密系统的密钥,从而获得解密的能力。

需要注意的是,选择密文攻击需要攻击者在攻击前能够选择一些密文进行提交。这通常意味着攻击者需要具有对加密系统的一些操作权限,例如截获网络传输的密文或者直接访问加密系统的加密接口。

加解密的通信模型

对称加密

使用同一个密钥,对数据镜像加密和解密,这种加密技术,称为对称加密。
在这里插入图片描述

对称加密常用算法:
DES,3DES,IDEA,AES

优点:
算法公开、计算量小、加密速度快、加密效率高

缺点:
不同通讯双方使用不同密钥,导致密钥过多,难以管理
通讯双方密钥交换,无法保证安全
无法验证发送者和接受者身份

PKI通信工作流程

从以上的介绍中可以看出,各种加密算法都有其特点和适用性:

使用非对称加密,发送者A使用私钥加密,接受者B能够验证数据的发送者A是谁,由于所有人都能使用发布者A公钥解密,这种方法只能适合发布公开的信息。
接受者B的公钥是公开的,用它加密数据后发给B,有可能被截获掉包。

非对称加密算法,加密速度很慢,强度高。对称加密算法,速度快,但是密钥交换是个问题。

单向加密不可逆,接收者无法还原到明文。

那么,就需要一种通信模型能够扬长避短,解决通信安全的问题,于是便有了下面的模型:PKI通信流程

1、发送者A准备好信息明文。
2、发送者A对信息进行哈希运算(单向加密算法),得到一个信息摘要。
3、发送者A使用自己的私钥(SK)对信息摘要进行加密,即数字签名,之后将其附件在发送的信息上。(实现不可否认性)
4、发送者A随机生成一个对称加密密钥,并使用它对发送的信息包括摘要进行对称加密,生成密文。
5、发送者A再使用接收方的公钥(PK)对第4步使用的随机对称密钥进行加密,之后将其附加至第4步生成的密文上,一并发给接收者B。
6、接收者B收到发送者A的密文后,首先使用自己的私钥(SK)解密出对称加密的密钥。
7、接收者B使用对称密钥解密密文,得到附加摘要的信息明文。
8、接收者B使用发送者的公钥(PK)解密摘要,获得哈希值
9、接收者B使用同样的哈希算法再次对信息明文计算,得到新的信息摘要,与解密后的摘要比对,如果一致,则说明收到的信息明文未被篡改。(保证数据完整性)

以上的通信模型很好的解决了数据完整性、不可否认性,但这个模型的依赖的关键点是双方公钥。

这个模型中双方公钥来源无法验证,而且在通讯前,如何获得每个人的可信任的公钥也成了整个系统的关键。

因此,需要一套系统,能够解决以上存在的种种问题:身份认证、数据完整性、密钥交换、操作的不可否认性,它就是PKI。

古典密码与分析

古代密码的加密

古典密码的加密方式是使用某种规则将明文转化为密文,而解密就是将密文转化为明文。在这个过程中,密钥起到了重要的作用,密钥是一个参数,用于决定加密和解密的规则。

这一时期的密码学更像是一门艺术,其核心手段是代换和置换。代换是指明文中的每一个字符被替换成密文中的另一个字符,接收者对密文做反向替换便可恢复出明文;置换是密文和明文字母保持相同,但顺序被打乱。

古代的藏宝图,经过层层的加密化,其实也是我国古典密码学的一个表现。
代换密码的著名例子有:古罗马的凯撒密码(公元前1世纪)和法国的维吉尼亚密码(16世纪)。
凯撒密码是对字母表中每个字母用它之后的第k个字母来代换,如,将“comeatnine”加密为“htrjfysnsj”(k=5)。
但这种加密方式无法掩盖各字母的频率特征,易被破解。
维吉尼亚密码相比之下提升了安全性,它的密钥通常是一个单词,如,“hear”,对于上述明文“comeatnine”,加密时将第1个字母后移8位(密钥“hear”的第一个字母h处于字母表第8位),第2个字母后移5位(密钥的第二个字母e处于字母表第5位),……,因此加密后的结果是“jsmvhxnzui”。

抗战片里面发报文的时候发的是密文,这个密文会对应一个密码本,比方说《三国演义》这本书。它的加密方式会告诉你加密的文字属于书中的那个字,当你解密完成之后,就可以得到明文的报文。这是一种常见的古典加密方法。

古典密码的分析

古典密码的分析方法有很多种,其中比较常用的是频率分析和差分分析。

频率分析是指通过分析密码中出现频率最高的字母来推断密钥。在英语中,字母“e”出现的频率最高,所以攻击者可以通过分析密文中出现频率最高的字母来猜测密钥。

差分分析是指通过对明文和密文之间的差异进行分析来推断密钥。攻击者可以选择两个密文,并比较它们在明文中的差异,然后推测密钥。

安全服务

身份认证、传输加密、存储加密、应用程序保护

身份认证是安全服务的基础,它通过验证用户身份来保护系统和数据的安全。身份认证可以采用多种方式,如用户名密码、指纹识别等,其目的是确认用户的身份,确保只有授权用户才能访问敏感信息。

传输加密是通过使用加密技术来保护数据在传输过程中不被恶意攻击者窃取或篡改。加密技术可以采用公开密钥加密(PKI)、SSL/TLS等方式来保护敏感数据在传输过程中的安全。

存储加密是指采用加密技术来保护数据在存储时的安全。通过对存储数据进行加密,可以保护数据不被未授权访问或窃取,增强数据安全性。

应用程序保护是指在应用程序开发过程中,采用安全开发、代码审计等方法来保护应用程序的安全性。应用程序保护可以增强应用程序的鲁棒性和防御能力,有效预防各种漏洞和攻击。

香农理论

香农理论,又称信息论,是由美国数学家克劳德·香农于1948年发明的一种基于数学原理的理论体系。它主要研究如何量化信息的传输和处理,包括信息的压缩、传输、存储以及加密等方面。它的贡献在于提供了一套清晰的数学工具,用于衡量信息的容量、可靠性和传输速度等问题,从而为通信领域提供了强有力的支持和指导。

香农理论的核心概念是信息熵和信道容量
信息熵是指信息的不确定性程度,即信息中所包含的“信息量”。比如,如果一组信息有多种可能的取值,那么它的信息熵就比较高,因为我们无法确定具体的取值。
信道容量则是指在一定的信道条件下,信道可以传输的最大信息量。这两个概念被广泛应用于通信领域,例如在数据压缩、数据传输和信道编码等方面。

此外,香农理论还提出了一种被广泛应用的加密方法,即信息论加密。它利用信息熵的概念,将明文数据转化为一种无规律可循的密文数据,从而保证了信息的保密性和语义安全性。

现代密码学

乘积密码方案

乘积密码方案是一种经典的加密方法,其基本思想是将明文转化为数字序列,并在一定规则下进行乘法运算,得到密文。其加密过程简单、安全性高,曾经被广泛应用于电报通信和军事领域的加密。

具体的实现方法是,首先将明文进行编码,得到数字序列。然后选取两个长度相等的密钥,分别为公钥和私钥。公钥可以公开,而私钥只有接收方知道。接下来,将明文数字序列中的每个数字与公钥中的对应数字相乘,并取模得到密文数字序列。接收方可以使用私钥将密文数字序列进行解密,还原出明文。

例如,假设明文为“hello world”,
编码为数字序列为[8,5,12,12,15,0,23,15,18,12,4],
选取公钥为[2,3,5,7,11,13,17,19,23,29,31],
私钥为[59,61,67,71,73,79,83,89,97,101,103]。
则加密过程为:[8,5,12,12,15,0,23,15,18,12,4] * [2,3,5,7,11,13,17,19,23,29,31] = [16,15,60,84,165,0,391,285,414,348,124]
[16,15,60,84,165,0,391,285,414,348,124] % [59,61,67,71,73,79,83,89,97,101,103] = [50,11,26,13,16,0,62,7,93,15,10]解密过程为:[50,11,26,13,16,0,62,7,93,15,10] * [59,61,67,71,73,79,83,89,97,101,103] = [2950,671,1734,923,1168,0,5146,623,9021,1515,1030]
[2950,671,1734,923,1168,0,5146,623,9021,1515,1030] % [2,3,5,7,11,13,17,19,23,29,31] = [8,5,12,12,15,0,23,15,18,12,4]

可以发现,加密后的密文数字序列与原始的明文数字序列没有任何关联,因此具有较高的安全性。

虽然乘积密码方案已经被现代密码学所取代,但其思想和基本原理依然具有参考价值,尤其是在一些传统的通信和加密场景中仍然得到了广泛应用。

代换-置换网络

代换-置换网络(Substitution-Permutation Network,SPN)是一种常用的对称密钥密码算法结构。它采用代换和置换两种基本操作,使得密文与明文之间的关系变得非常复杂,从而增强加密的安全性。

代换操作是指将明文某一部分替换成密文的另一部分,常见的代换操作包括置换、S盒代换等。例如,置换操作可以将明文中的某个比特位置与其他比特位置交换,S盒代换则是将一组输入映射到一组输出。在SPN中,代换操作通常是通过多个轮次的代换层实现的。

置换操作则是指通过重排明文的比特顺序来生成密文。置换操作可以增强加密算法的弥散性,使得每一位明文比特对最终密文的影响都非常均衡。在SPN中,置换操作通常是通过最终的置换层实现的。

下面以AES密码算法为例,介绍SPN的具体实现。在AES算法中,SPN采用四个基本操作:字节代换(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。其中字节代换和行移位属于代换操作,列混淆属于置换操作,轮密钥加则是在每一轮加入密钥来增强加密的安全性。

在AES算法中,SPN的基本流程如下:

  1. 确定加密轮数和密钥长度。

  2. 将明文分割成16个字节的块,并进行填充。

  3. 初始轮密钥加,即将明文与初始密钥进行异或操作。

  4. 进行多轮SPN操作,每轮都包括字节代换、行移位、列混淆和轮密钥加四个操作,并使用不同的轮密钥。

  5. 最后一轮仅包含字节代换、行移位和轮密钥加三个操作。

  6. 将加密后的各个块组合成密文。

通过SPN的代换和置换操作,结合轮密钥加等安全机制,AES算法能够保证较高的加密安全性。因此,SPN被广泛应用于实际的加密通信、数据存储等领域。

安全性概念

可证明安全性——规约(*规约证明的方案——会考)

可证明安全性指的是一种安全证明,即证明一个密码协议在某些假设下是安全的。可证明安全性的证明不仅可以增加对加密算法的信任度,也可以帮助设计密码协议的人们更好地理解安全性考虑的所有细节,从而设计更加安全的协议。

密码学中的归约(Reducibility)是指将一个复杂问题转化为一个已知解法的问题。具体来说,它是一种证明方法,通过将一个待证明的问题转化为另一个已知解法的问题,来证明待证明问题的正确性。

假设我们想证明一个新的对称加密算法(称为算法X)的安全性
我们可以将算法X归约到另一个已知的对称加密算法(称为算法Y)的安全性证明上。这可以通过构造一个将算法X的任意输入转换为算法Y的输入的“黑盒”模拟来完成。然后,我们可以使用算法Y的安全性证明来证明算法X的安全性

例如,我们要证明一个加密算法A是安全的,我们可以使用归约的方法。
归约(reduction)是一种证明算法安全性的常见方法,其基本思想是将要证明的算法A转化为一个已知安全的算法B。具体流程如下:

  1. 假设存在攻击算法C,可以在有限时间内破解算法A。

  2. 利用攻击算法C构造一个新的攻击算法D,探索该算法D是否可以在有限时间内破解算法B,即D能够得到B的正确性输出。

  3. 将算法D作为黑盒,输入算法B的挑战密文和加密密钥,输出正确的明文。

  4. 如果算法D可以成功地破解算法B,则说明攻击算法C可以成功地破解算法A。此时,A的安全性就无法得到保证。

  5. 如果算法D无法成功地破解算法B,则说明攻击算法C无法成功地破解算法A。此时,A的安全性得到了保证。

这就是归约的基本过程,通过将一个问题转化为另一个已知解法的问题,来证明原问题的正确性。

加密方案的定义

在密码学中,加密方案的目标是将一个明文消息m加密为一个密文c,使得只有拥有相应密钥的人能够解密并获得原始的明文消息。为了实现这个目标,加密方案可以采用对称加密或公钥加密的方式。

对称加密方案的加密密钥和解密密钥是相同的,通常用一个变换函数E来表示,即

c = E k ( m ) c = E_k(m) c=Ek(m)

其中,k表示密钥,m表示明文消息,c表示密文。
基本思路是,用密钥k对明文m进行加密得到密文c,然后将密文c传输给接收者,接收者再使用密钥k进行解密得到明文m。

而在公钥加密方案中,加密密钥和解密密钥是不同的,通常用一个加密函数E和一个解密函数D来表示,即

c = E p k ( m ) , m = D s k ( c ) c = E_{pk}(m),\ m = D_{sk}(c) c=Epk(m), m=Dsk(c)

其中,pk表示公钥,sk表示私钥,m表示明文消息,c表示密文。
基本思路是,使用接收者的公钥pk对明文m进行加密得到密文c,然后将密文c传输给接收者,接收者再使用自己的私钥sk进行解密得到明文m。

完善保密性

完善保密性的方法主要包括密钥管理、密钥交换、随机数生成等。其中,密钥管理是指保证密钥的安全性,如生成、存储、更新和销毁密钥;密钥交换是指在不安全信道上安全地交换密钥,常用的方法包括Diffie-Hellman密钥交换、RSA密钥交换等;随机数生成是指生成高质量的随机数以保证加密算法的安全性。
P ( m ∣ c ) = P ( c ∣ m ) P ( m ) P ( c ) P(m|c) = \frac{P(c|m)P(m)}{P(c)} P(mc)=P(c)P(cm)P(m)

其中, P ( m ∣ c ) P(m|c) P(mc)为明文 m m m在得到密文 c c c的情况下的后验概率, P ( c ∣ m ) P(c|m) P(cm)为明文 m m m加密后得到密文 c c c的概率, P ( m ) P(m) P(m)为明文 m m m的先验概率,即 m m m出现的概率, P ( c ) P(c) P(c)为密文 c c c的先验概率,即 c c c出现的概率。

如果对于任意的 m m m c c c,都有 P ( m ∣ c ) = P ( m ) P(m|c) = P(m) P(mc)=P(m),则密码体制具有完善保密性。

实际应用中,常用的完善保密性的密码体制有一次性密码本(One-Time Pad)和矩阵加密(Matrix Encryption)等。这些密码体制的基本思想是利用随机性和密钥的唯一性来实现完善保密性。同时,在应用过程中,也需要确保密钥的安全性和随机性,以免被攻击者破解。

语义安全性

语义安全性是指对于任意两个不同的明文消息m和m’,加密后的密文c和c’几乎是相互独立的,即对于任意的攻击者攻击策略,攻击者无法在多项式时间内区分出密文c是由明文消息m加密得到还是由明文消息m’加密得到。常用的语义安全加密方案包括基于单向函数的加密方案和基于公钥密码的加密方案。

相关文章:

【11.10】现代密码学1——密码学发展史:密码学概述、安全服务、香农理论、现代密码学

密码学发展史 写在最前面密码学概述现代密码学量子密码学基本术语加解密的通信模型对称加密PKI通信工作流程 古典密码与分析古代密码的加密古典密码的分析 安全服务香农理论现代密码学乘积密码方案代换-置换网络安全性概念可证明安全性——规约(*规约证明的方案——…...

时间序列预测实战(九)PyTorch实现LSTM-ARIMA融合移动平均进行长期预测

一、本文介绍 本文带来的是利用传统时间序列预测模型ARIMA(注意:ARIMA模型不属于机器学习)和利用PyTorch实现深度学习模型LSTM进行融合进行预测,主要思想是->先利用ARIMA先和移动平均结合处理数据的线性部分(例如趋势和季节性&#xff09…...

由日期计算当天是星期几

题目 输入:一个合法的公历日期,格式为“XXXXXXXX”,分别代表年(4 位)、月(2 位)、日(2 位)。 输出:当日对应星期几的英语缩写(3 个字母&#xff…...

springboot模板引擎

1.服务端渲染时相比与前后端分离开发 原理是 跳过前端这一层 直接到服务端 通过数据和模板 生成页面返回前端 springboot包含如下模板引擎 典型如thymeleaf 1>导入依赖 2>查看路径 模板页面在 public static final String DEFAULT_PREFIX “classpath:/templates/”; 即…...

如何判断从本机上传到服务器的文件数据内容是一致的?用md5加密算法!

问题场景 最近在帮导师做横向,我想把整个项目环境放到服务器中,需要把一个很大的数据文件传到服务器,传上去很方便,但是涉及到文件的压缩上传和服务器内解压环节,不是太确定文件在本机和服务器的数据内容是否一致。 解…...

Ubuntu 20.04 DNS解析原理, 解决resolv.conf被覆盖问题

------------------------------------------------------------------ author: hjjdebug date: 2023年 11月 09日 星期四 14:01:11 CST description: Ubuntu 20.04 DNS解析原理, 解决resolv.conf被覆盖问题 ----------------------------------------------------------------…...

探索经典算法:贪心、分治、动态规划等

1.贪心算法 贪心算法是一种常见的算法范式,通常在解决最优化问题中使用。 贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法范式。其核心思想是选择每一步的最佳解决方案,以期望达到最终的全局最优解。这种算法特点在于只考虑局部最优解&am…...

【Linux】编译Linux内核

之所以编译内核,是因为gem5全系统仿真需要vmlinux文件,在此记录一下以备后面需要。 此过程编译之后会获得vmlinux和bzImage两个文件; 主要参考知行大佬的编译内核与gem5官方教程 文章目录 一、Linux源码下载二、安装编译依赖三、编译1. 内核编…...

网页判断版本更新

一、需求解析 为什么我会想到这个技术呢,是因为我有一次发现,我司的用户在使用网页的时候,经常会出现一个页面放很久,下班也不关这个页面,这样就会导致页面的代码长时间处于不更新的状态。 在使用到一个功能出了bug&a…...

ros1 基础学习08- 实现Server端自定义四 Topic模式控制海龟运动

一、服务模型 Server端本身是进行模拟海龟运动的命令端,它的实现是通过给海龟发送速度(Twist)的指令,来控制海龟运动(本身通过Topic实现)。 Client端相当于海龟运动的开关,其发布Request来控制…...

面试题之TCP粘包现象及其解决方法

计算机网络每层的基本单位:物理层(第一层):比特流;数据链路层(第二层):数据帧;网络层(第三层):数据包;传输层(…...

Word 插入的 Visio 图片显示为{EMBED Visio.Drawing.11} 解决方案

World中,如果我们插入了Visio图还用了Endnote, 就可能出现:{EMBED Visio.Drawing.11}问题 解决方案: 1.在相应的文字上右击,在出现的快捷菜单中单击“切换域代码”,一个一个的修复。 2.在菜单工具–>…...

Elasticsearch倒排索引、索引操作、映射管理

一、倒排索引 1、倒排索引是什么 倒排索引源于实际应用中需要根据属性的值来查找记录,这种索引表中的每一个项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而成为倒排索引。带有倒排索引的文件我们称之为倒…...

USEFUL PHRASES

THINGS YOU LIKE Q:Do you like social science? Yes, I can’t get enough of it.Yes, what I like most about it is it’s so interesting, for example, last week I read an article about solar panels and how we use them to protect the planet.Yes, I lo…...

【OpenCV】 拟合直线 与 霍夫直线 对比 , fitLine()与 HoughLinesP()对比

文章目录 1 fitLine 与 HoughLinesP 函数原型2 拟合直线 与 霍夫直线 对比拟合线和圆,是通过已知点拟合出对应的方程,拟合方法如最小二乘法,RANSAC算法等。如果拟合点的离散成都较高,拟合方法的正确选择,是提高识别精度的一大要点。 1 fitLine 与 HoughLinesP 函数原型 …...

Python与ArcGIS系列(六)查找和修复数据源

目录 0 简述1 查找丢失数据源2 findAndReplaceWorkspacePaths()方法修复丢失数据源3 replaceWorkspaces()方法修复丢失数据源4 replaceDataSource()修复单个图层和表对象0 简述 当对数据源进行移动、转换和删除时都会导致数据源丢失链接问题,无法正常显示地图数据。对于多个数…...

聊聊logback的TimeBasedRollingPolicy

序 本文主要研究一下logback的TimeBasedRollingPolicy TimeBasedRollingPolicy public class TimeBasedRollingPolicy<E> extends RollingPolicyBase implements TriggeringPolicy<E> {static final String FNP_NOT_SET "The FileNamePattern option must…...

numpy 基础使用

NumPy是Python中科学计算的基础包。它是一个Python库&#xff0c;提供多维数组对象&#xff0c;各种派生对象&#xff08;如掩码数组和矩阵&#xff09;&#xff0c;以及用于数组快速操作的各种API&#xff0c;有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变…...

sqlite3编译脚本

../configure --hostarm --buildx86 CC/opt/sdk/gcc-arm-8.3-arm-armv5t-linux-gnueabi/bin/arm-armv5t-linux-gnueabi-gcc --prefix/opt/sdk/gcc-arm-8.3-arm-armv5t-linux-gnueabi/arm-armv5t-linux-gnueabi/sysroot/usr...

环形链表解析(c语言)c语言版本!自我解析(看了必会)

目录 1.判断一个表是否是环形链表&#xff01; 代码如下 解析如下 2.快指针的步数和慢指针的步数有什么影响&#xff08;无图解析&#xff09; 3.怎么找到环形链表的入环点 代码如下 解析如下 1.判断一个表是否是环形链表&#xff01; 代码如下 bool hasCycle(struct L…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口&#xff08;interface&#xff09;二、socket.cpp 实现&#xff08;implementation&#xff09;三、server.cpp 使用封装&#xff08;main 函数&#xff09;四、client.cpp 使用封装&#xff08;main 函数&#xff09;五、退出方法…...

网页端 js 读取发票里的二维码信息(图片和PDF格式)

起因 为了实现在报销流程中&#xff0c;发票不能重用的限制&#xff0c;发票上传后&#xff0c;希望能读出发票号&#xff0c;并记录发票号已用&#xff0c;下次不再可用于报销。 基于上面的需求&#xff0c;研究了OCR 的方式和读PDF的方式&#xff0c;实际是可行的&#xff…...

大数据驱动企业决策智能化的路径与实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;数据驱动的企业竞争力重构 在这个瞬息万变的商业时代&#xff0c;“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...

「Java基本语法」变量的使用

变量定义 变量是程序中存储数据的容器&#xff0c;用于保存可变的数据值。在Java中&#xff0c;变量必须先声明后使用&#xff0c;声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例&#xff1a;声明与初始化 public class VariableDemo {publi…...

在Spring Boot中集成RabbitMQ的完整指南

前言 在现代微服务架构中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件&#xff0c;支持多种消息协议&#xff0c;具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…...