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

不安全物联网的轻量级加密:综述

Abstract

本文综述了针对物联网(IoT)的轻量级加密解决方案。这项综述全面覆盖了从轻量级加密方案到不同类型分组密码的比较等多个方面。同时,还对硬件与软件解决方案之间的比较进行了讨论,并分析了当前最受信赖且研究最深入的分组密码——高级加密标准(AES)——在架构、列混合/Mix-Column和S盒/S-box修改策略,以及物联网安全相关攻击等方面的最新研究方法。研究表明,轻量级AES在资源受限的物联网设备中已经被证明是一种有效的安全解决方案。

Introduction

随着人类对生活便利性的追求,历史表明,需求是推动创新的动力,而现代科学技术的发展也随之加速。如今,随着物联网(IoT)设备数量的爆发性增长,世界变得日益互联。根据Statista 2018的统计数据,到2020年,联网设备的数量将增长到近310亿台。随着这些设备数量的增加,最重要的问题变成了安全性。长久以来,这个庞大网络的安全性问题一直被制造商和消费者所忽视。

我们的技术依赖型生活方式正引导我们走向一个“万物不安全互联”的世界,因此,现在是我们退一步,认真分析这一问题的关键时刻。安全性已成为该领域研究人员的主要关注点。

物联网(IoT)由多个相互连接的设备组成,这些设备之间不断共享信息和数据。为了保护这些信息,我们需要了解物联网设备的基本安全特性:

  • 保密性(Confidentiality):需要确保信息仅对授权用户可用。
  • 可用性(Availability):多个设备相互连接时,需要确保设备能在需要时获取所需数据。
  • 完整性(Integrity):需要确保数据的准确性。
  • 认证(Authentication):这是一个重要但从物联网角度看难以实现的特性。在物联网中,连接的实体有不同的用途、目的和层次结构。
  • 异构性(Heterogeneity):由于网络中的不同实体具有不同的功能、复杂性,甚至不同的制造商,因此也需要确保网络的异构性。
  • 密钥加密(Key Encryption):这是最重要的一步。为了确保安全连接,设备和其他实体需要具备轻量级的密钥管理系统。

随着时间的推移,数据和密钥传输的安全性需求催生了加密学的概念。加密学是一种通过将数据转化为无法识别和无关联的形式,从而保护数据免遭未授权访问的过程。根据物联网(IoT)的需求,专用的加密算法需要在面积、内存占用、功耗和能量消耗方面保持轻量级。

本文对物联网安全解决方案的不同阶段的近期研究工作进行了综述,全面涵盖了从轻量级加密方案到不同类型分组密码的比较等安全措施流程。此外,我们还对硬件与软件解决方案之间的比较以及高级加密标准(AES)在物联网安全领域中的最新研究方法进行了探讨,包括其架构、列混合/Mix-Column与S盒/S-box修改策略以及攻击分析。

文章结构

  • 第二节:讨论了轻量级加密,包括加密学的两大主要分支——非对称加密和对称加密。同时,还整理并分析了可能适用于物联网应用的不同类型流密码和分组密码。
  • 第三节:探讨了高级加密标准(AES),这一最受信赖且研究最深入的分组密码。我们结合了针对AES在物联网中应用的架构优化、列混合(Mix-Column)和S盒(S-box)修改策略及其面对攻击的研究成果。

Lightweight cryptography

有多种加密解决方案可用于保护我们的重要数据,但不幸的是,并非所有方案都适用于像物联网(IoT)设备这样的资源受限环境。轻量级加密解决方案正在被深入研究,旨在提供高效的面积和功率解决方案。商业和工业物联网设备都容易受到特定于物联网的攻击。如果我们继续使用现有的物联网设备设计流程,未来可能会面临安全灾难。当前的加密原语可以分为两类:

  • 非对称密钥加密
  • 对称密钥加密

A. 非对称密钥加密
非对称密钥加密也称为公钥加密,因为在这种技术中,需要一对公钥和私钥(如图1所示)。最近,轻量级加密的研究重点逐渐转向非对称密钥加密,但其成果尚未像对称密钥加密那样稳定和有成效。轻量级非对称算法在操作上较为复杂,且效率不高。此外,由于操作数的大小以及攻击模型的不断发展,这些算法也变得更加脆弱[2]。


以下是一些非常重要的非对称算法:

  • Rivest-Shamir-Adleman (RSA)
    • 逆向过程对攻击者来说非常困难,同时从公钥推导出私钥也极其困难。因此,该方法具有高度的安全性,但密钥生成过程复杂且速度较慢。

(1)RSA 公钥私钥计算

(2)RSA 加密解密过程

  • Diffie-Hellman
    • 私钥非常短,因此加密过程较快。但由于私钥长度较短,该方法更容易受到攻击,特别是中间人攻击。
  • 数字签名算法(DSA)
    • 此方法比其他非对称算法更快,且在许多场景中更有优势。然而,数字签名的生命周期较短,且共享过程较为复杂[3]。
  • 椭圆曲线加密(ECC)
    • 尽管ECC算法更为复杂且难以实现,但它的功耗较低。在多种非对称算法中,ECC最适合在资源受限的设备中实现[2]。

ECC 的研究现状
近年来,ECC在物联网(IoT)领域的研究成为一个重要课题,但大多集中于软件层面。例如:

  • 软件实现:
    [4] 实现并评估了一种基于开源ECC的方案,运行于物联网操作系统Contiki OS上,其实现以BSD许可证发布。
    [5] 应用了ECC方法,并在一个名为Wiselib的开源和通用编程库中提出了零知识协议的实现。
  • 硬件实现:
    [6] 采用了一种硬件方法,证明ECC计算能够有效地抵御侧信道攻击。他们的方法适用于具有最低安全级别和硬件开销的轻量化实现。
  • 对比研究:
    [7] 对RSA、Diffie-Hellman以及椭圆曲线加密(包括椭圆曲线Diffie-Hellman, ECDH)进行了比较研究,发现ECDH在功耗和面积方面优于其他算法。

B. 对称密钥密码学

对称密钥密码学也被称为秘密密钥或共享密钥密码学(如图2所示)。在此过程中,发送者和接收者通过秘密通信共享一个共同的密钥,用于加密和解密。对称密码学由于其快速的操作(主要是XOR和置换操作)而更适合物联网(IoT)应用。其处理速度较快,且不会消耗太多资源[3]。表I显示了非对称密钥密码学与对称密钥密码学的直接比较。

对称算法中的一个重要区别是流密码和分组密码。流密码使用与数据大小相同的密钥。在这个过程中,密文是通过对明文的“逐位”操作得到的。常见的轻量级流密码包括Trivium、Chacha、WG-8、Espresso,这些算法具有较高的吞吐量。Grain 128是最受欢迎且适用于受限设备的轻量级密码之一,尽管它的吞吐量较低。Espresso被认为是1500 GE以下最快的轻量级密码[8]。

分组密码具有固定长度的位数,并且其变换过程的不同阶段由对称密钥决定。分组密码非常多用途,这对物联网(IoT)来说非常有帮助。另一个优点是该过程的加密和解密方法几乎是相同的。因此,它可以用更少的资源实现。虽然分组密码的延迟较低,但它们是物联网安全中研究最多、改进最多的解决方案[8]。常见的分组密码包括高级加密标准(AES)、数据加密标准(DES)、3DES、Blowfish、Twofish。研究人员采取了不同的方法,使这些分组密码变得轻量并适合物联网使用。其他一些正在研究的轻量级分组密码包括Curupira、PRESENT、KATAN、TEA、Humming Bird、RECTANGLE、SIMON。表II显示了一些常见分组密码之间的基本比较[8][9][10][11]。

不同的密码学标准化工作既考虑了软件安全性,也考虑了硬件安全性。在[12]中,对几种轻量级分组密码的硬件和软件实现进行了比较。软件和硬件的安全解决方案有不同的衡量标准。软件度量包括周期数、内存、每字节周期数,而硬件度量包括吞吐量、面积、吞吐量-面积比率。要直接比较这两者是很困难的。在[12]中,作者通过使用定制的轻量级可重配置处理器成功地进行了比较,比较了AES、SIMON、SPECK、PRESENT、LED、TWINE的面积、吞吐量/面积比等硬件和软件实现的指标。SPECK、TWINE和PRESENT在硬件和软件中表现良好。表III提供了硬件和软件安全解决方案的基本比较[13]。

需要特别指出的是,在所有分组密码算法中,AES(高级加密标准)是研究得最深入的算法。关于AES的许多研究已经完成,并且仍在继续,旨在使其更加轻量并适合物联网使用。

AES

AES概述与标准化
  • AES的标准化:AES作为加密标准,由美国NIST于2001年标准化。此后,它成为最广泛使用的对称加密算法之一,尤其适用于数据保护和加密应用。它具有强大的安全性和高效性,因此被大量研究与应用。
AES的安全性与适用性
  • 不同设备的需求:不同的设备可能对安全性有不同的需求,并且设备的功耗和处理能力(吞吐量)各异,因此AES支持不同的密钥长度,以适应不同的安全需求。
  • AES的优点:AES算法经过充分的安全性验证,已被广泛应用于数据加密和其他安全措施中。与其他对称加密算法相比,AES的复杂度较低,能提供较高的安全级别[14]。
AES的结构与过程

AES的加密过程被分为四个主要步骤,其中每个步骤包含不同的操作。

  1. 密钥扩展

    • 通过密钥扩展过程,AES从原始的密钥生成一系列的轮密钥,供后续的加密轮次使用。该过程包括三个子步骤:旋转(Rotate)、S-盒替换(S-Box)和Rcon(一个常数)。
  2. 初始轮次

    • Add Round Key:在此步骤中,AES的每个字节与轮密钥通过逐位XOR操作结合,完成初步加密。
  3. 后续轮次

    • Sub Bytes:这一阶段进行非线性字节替换,每个字节用预定的查找表替换,增加加密的复杂性。
    • Shift Rows:该步骤对数据进行循环移位,状态的后三行根据指定的步数移动。
    • Mix Columns:对状态矩阵的每一列进行混合操作,目的是通过线性变换增加加密的强度。
  4. 最后轮次

    • 在最后一轮中,除了“列混合”步骤外,其他步骤都将继续执行。最终完成加密。

B. 近期关于AES在物联网中的研究工作:聚焦混合列(Mix Column)和S盒(S-box)

AES算法的硬件实现面临两个主要挑战:混合列(Mix Column)轮次和S盒(S-box)。减少硬件实现AES的面积和延迟是研究人员的主要目标。研究人员一直在努力提出适用于物联网的轻量级AES。至今,关于混合列和S盒的研究仍在继续。

[25]提出了一种新的FPGA实现AES的方法,使用了高性能的混合列(Mix-Column)和逆混合列(inv-Mix Column)方法,利用了二进制计算的特性。他们的结果显示,与原始AES设计相比,面积减少了12%,速度提高了20%。另一篇论文[26]也在混合列方面做了优化,旨在使其更快且低复杂性。其结果显示,相较于其他相关工作,复杂性较低,所需的门数减少。另有研究[27]在混合列方面也做了工作,并在门的尺寸和时钟周期数方面取得了更好的结果。

[28]提出了一种新的方法,设计了一个低面积的GF(2^8)有限域反演器,具有最短的关键路径,用于S盒。[29]使用了从交换链环中获得的S盒。[30]提出了一种新的设计,结合了AES的S盒和逆S盒,他们的设计在研究中表现优于其他最佳设计。S盒和混合列轮次是AES成为轻量级、适合物联网的分组密码的两个主要问题。目前,关于AES的安全性没有争议。脆弱的物联网网络可以通过轻量级AES得到保护。研究人员一直在提出新的架构,致力于混合列和S盒的优化,以实现这一目标。

 

相关文章:

不安全物联网的轻量级加密:综述

Abstract 本文综述了针对物联网(IoT)的轻量级加密解决方案。这项综述全面覆盖了从轻量级加密方案到不同类型分组密码的比较等多个方面。同时,还对硬件与软件解决方案之间的比较进行了讨论,并分析了当前最受信赖且研究最深入的分组…...

DeepSpeed 使用 LoRA 训练后文件结构详解

DeepSpeed 使用 LoRA 训练后文件结构详解 在大语言模型(LLM)的训练过程中,DeepSpeed 提供了强大的分布式训练能力,而 LoRA(Low-Rank Adaptation)通过参数高效微调技术显著减少了资源占用。完成训练后&…...

Mysql数据 新增、修改和删除操作时,这些变化如何被转换为Kafka消息?

Mysql数据 新增、修改和删除操作时,这些变化如何被转换为Kafka消息? 为了在FlinkCDC中配置MySQL同步到Kafka,并采用debezium-json数据格式,我们需要了解当执行新增、修改和删除操作时,这些变化如何被转换为Kafka消息。下面我们将详细介绍这些变化情况,并提供具体的数据样…...

高等数学 8.1向量及其线性运算

8.1 向量及其线性运算 文章目录 8.1 向量及其线性运算一、向量的概念向量的线性运算1.向量的加减法2.向量与数的乘法 三、空间直角坐标系四、利用坐标作向量的线性运算五、向量的模、方向角、投影1.向量的模与两点间的距离公式2.方向角与方向余弦3.向量在轴上的投影 一、向量的…...

向bash shell脚本传参

例子: ~ script % touch parameter.sh ~ script % chmod 755 parameter.sh ~ % vim parameter.shparameter.sh: #!/usr/bin/env bashecho the name of current script is $0echo the first parameter is $1echo the second parameter is $2echo all parameters: $…...

高精度算法:加减乘除 (学习笔记)

加法&#xff1a; 现有vector<int>a,b;并且已经输入了内容且倒置 vector<int> plus(vector<int>a,vector<int> b){ int as a.size(); int bs b.size(); vector<int>total; int carry 0; int ar 0, br 0; //读取位数 while (ar < as &am…...

JVM 主要组成部分与内存区域

一、JVM 主要组成部分&#xff1a; JVM的主要包含两个组件和两个子系统&#xff0c;分别为&#xff1a; &#xff08;1&#xff09;本地库接口(Native Interface)&#xff1a;与native lib(本地方法库)交互&#xff0c;融合其他编程语言为Java所用&#xff0c;是与其它编程语言…...

10分钟掌握项目管理核心工具:WBS、甘特图、关键路径法全解析

一、引言 在项目管理的广阔天地里&#xff0c;犹如一场精心编排的交响乐演奏&#xff0c;每个乐器、每个音符都需精准配合才能奏响美妙乐章。而 WBS&#xff08;工作分解结构&#xff09;、甘特图、关键路径法无疑是这场交响乐中的关键乐章&#xff0c;它们从不同维度为项目管…...

python语音机器人(青云客免费api)

强调&#xff1a;不用登录注册&#xff0c;直接使用就好 青云客智能聊天机器人API python代码&#xff0c;直接可以运行&#xff1a; 1、安装库&#xff1a; pip install requests pyttsx3 SpeechRecognition sounddevice numpy scipy2、完整代码&#xff1a; import request…...

策略模式以及优化

使用场景 在一个条件语句中又包含了多个条件语句 具体策略类会过多 把抽象策略和具体策略放在一个枚举类里。 方法 exe() 相当于抽象策略&#xff0c;而A和B就相当于实现了抽象策略的具体策略 这样就只需要一个枚举类就可以解决具体策略类过多的问题 public enum Strategy {A{O…...

解决tomcat双击startup.bat乱码的几种方法

新环境&#xff0c;win10&#xff0c;今天下载了tomcat9.0.98&#xff0c;是压缩绿色版的&#xff0c;解压缩安装到了&#xff1a; D:\java\apache-tomcat-9.0.98 可以通过‪D:\java\apache-tomcat-9.0.98\bin\startup.bat双击来启动tomcat。 但是日志显示乱码。 后来找到了几种…...

计算机网络 (12)物理层下面的传输媒体

前言 计算机网络物理层下面的传输媒体是计算机网络设备之间的物理通路&#xff0c;也称为传输介质或传输媒介&#xff0c;并不包含在计算机网络体系结构中&#xff0c;而是处于物理层之下。 一、传输媒体的分类 导向型媒体&#xff1a;电磁波被导引沿着固体媒体传播。常见的导向…...

Spark生态圈

Spark 主要用于替代Hadoop中的 MapReduce 计算模型。存储依然可以使用 HDFS&#xff0c;但是中间结果可以存放在内存中&#xff1b;调度可以使用 Spark 内置的&#xff0c;也可以使用更成熟的调度系统 YARN 等。 Spark有完善的生态圈&#xff1a; Spark Core&#xff1a;实现了…...

如何计算相位差

如何计算相位差 假设我们有两个同频率的正弦信号&#xff1a; 这里两个信号的角频率w2πf是相同的&#xff0c;根据同频正弦信号相位差的计算方法&#xff0c;直接用两个信号的相位相减。 再来看利用波形图计算相位差的例子&#xff1a; 另一种计算方式&#xff1a;...

Bash Shell知识合集

1. chmod命令 创建一个bash shell脚本 hello.sh ~script $ touch hello.sh脚本创建完成后并不能直接执行&#xff0c;我们要用chmod命令授予它可执行的权限&#xff1a; ~script $ chmod 755 hello.sh授权后的脚本可以直接执行&#xff1a; ~script $ ./hello.sh2.指定运行…...

《信管通低代码信息管理系统开发平台》Windows环境安装说明

1 简介 《信管通低代码信息管理系统应用平台》提供多环境软件产品开发服务&#xff0c;包括单机、局域网和互联网。我们专注于适用国产硬件和操作系统应用软件开发应用。为事业单位和企业提供行业软件定制开发&#xff0c;满足其独特需求。无论是简单的应用还是复杂的系统&…...

如何查看服务器内存占用情况?

如何查看服务器的内存占用情况&#xff1f;你知道内存使用情况对服务器性能的重要性吗&#xff1f;内存是服务器运行的核心资源之一&#xff0c;了解内存的占用情况可以帮助你优化系统性能。 要查看服务器的内存占用情况&#xff0c;首先需要确定你使用的是哪种操作系统。不同…...

【源码】Sharding-JDBC源码分析之SQL中影子库ShadowSQLRouter路由的原理

Sharding-JDBC系列 1、Sharding-JDBC分库分表的基本使用 2、Sharding-JDBC分库分表之SpringBoot分片策略 3、Sharding-JDBC分库分表之SpringBoot主从配置 4、SpringBoot集成Sharding-JDBC-5.3.0分库分表 5、SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表 6、【…...

OCR实践-Table-Transformer

前言 书接上文 OCR实践—PaddleOCR Table-Transformer 与 PubTables-1M table-transformer&#xff0c;来自微软&#xff0c;基于Detr&#xff0c;在PubTables1M 数据集上进行训练&#xff0c;模型是在提出数据集同时的工作&#xff0c; paper PubTables-1M: Towards comp…...

代码随想录五刷day6

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣144. 二叉树的前序遍历(递归)二、力扣144. 二叉树的前序遍历(迭代)三、力扣145. 二叉树的后序遍历(递归)四、力扣145. 二叉树的后序遍历(迭代)五、力扣…...

【自信息、信息熵、联合熵、条件熵、互信息】

文章目录 一、自信息 I(X)二、信息熵&#xff1a;衡量系统的混乱程度信息熵 H(X)联合熵 H(X,Y) 三、条件熵H(Y|X) 联合熵H(X,Y) - 信息熵H(X)四、互信息 I(X,Y)五、总结References 一、自信息 I(X) 自信息(Self-information) 是由香农提出的&#xff0c;用来衡量单一事件发生…...

我的秋招总结

我的秋招总结 个人背景 双非本&#xff0c;985硕&#xff0c;科班 准备情况 以求职为目的学习Java的时间大概一年。 八股&#xff0c;一开始主要是看B站黑马的八股文课程&#xff0c;背JavaGuide和小林coding还有面试鸭。 算法&#xff0c;250&#xff0c;刷了3遍左右 项目&…...

page_ref_freeze浅析

最近在研究struct page的引用计数refcount&#xff0c;看到有个page_ref_freeze()特性很有意思。用这篇博客记录一下。 本文分析基于linux4.19.195 static inline int page_ref_freeze(struct page *page, int count) {int ret likely(atomic_cmpxchg(&page->_refcoun…...

Python毕业设计选题:基于python的酒店推荐系统_django+hadoop

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 酒店客房管理 客房类型管理 客房预定管理 用户…...

选择 SquashFS 作为启动分区的文件系统格式:详细教程

SquashFS 是一种高压缩率的只读文件系统,广泛用于嵌入式系统、Linux 发行版以及其他需要节省存储空间的场景。它特别适合用于启动分区、只读根文件系统(rootfs)等应用,因为它通过压缩技术极大地节省了存储空间。在本博客中,我们将详细介绍如何在 RK3568 等嵌入式设备上使用…...

Unity 读Excel,读取xlsx文件解决方案

Unity读取表格数据 效果&#xff1a; 思路&#xff1a; Unity可以解析Json&#xff0c;但是读取Excel需要插件的帮助&#xff0c;那就把这个功能分离开&#xff0c;读表插件就只管读表转Json&#xff0c;Unity就只管Json解析&#xff0c;中间需要一个存储空间&#xff0c;使用…...

【C语言】指针数组、数组指针、函数指针、指针函数、函数指针数组、回调函数

【C语言】函数指针与指针函数 文章目录 [TOC](文章目录) 前言一、指针数组二、数组指针三、函数指针四、指针函数五、函数指针数组六、回调函数七、参考资料总结 前言 使用工具&#xff1a; 1.DEVC 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、…...

EasyExcel 模板+公式填充

使用 CellWriteHandler 的实现类来实现公式写入 Data NoArgsConstructor public class CustomCellWriteHandler implements CellWriteHandler {private int maxRowNum 2000;// 动态传入列表数量public CustomCellWriteHandler(int maxRowNum) {this.maxRowNum maxRowNum;}Ov…...

vue最新源码探索分析

我在github上fork了最新版本vue3.5版本的源码并做了大幅删除&#xff0c;保留最核心的代码&#xff0c;有兴趣的可以看看&#xff0c;欢迎大家提出PR 仓库地址 https://github.com/greatanimalion/core 本项目vue版本3.5.13 为了方便查看与分析&#xff0c;减少心智负担 已…...

产品初探Devops!以及AI如何赋能Devops?

DevOps源自Development&#xff08;开发&#xff09;和Operations&#xff08;运维&#xff09;的组合&#xff0c;是一种新的软件工程理念&#xff0c;旨在打破传统软件工程方法中“开发->测试->运维”的割裂模式&#xff0c;强调端到端高效一致的交付流程&#xff0c;实…...

深入解析MVCC中Undo Log版本底层存储读取逻辑

一、引言 多版本并发控制&#xff08;MVCC&#xff0c;Multi-Version Concurrency Control&#xff09;是一种广泛应用于关系数据库管理系统中的并发控制技术。它通过保存数据的历史版本&#xff0c;使得在事务并发执行时&#xff0c;每个事务都能看到数据的一致性视图。在MVC…...

【生产问题记录-Mysql分区】

描述 月报是根据日报的数据统计出来的&#xff0c;但是今天早上发现月报没有数据&#xff0c;日报是有数据的&#xff0c;那么为什么会导致这个结果呢&#xff1f; 问题解决 设计 因为日报table_day每天的数据量都在60w&#xff0c;所以我们采用了分区的形式&#xff0c;进…...

大型语言模型(LLMs)演化树 Large Language Models

大型语言模型&#xff08;LLMs&#xff09;演化树 Large Language Models flyfish 下面的图来自论文地址 Transformer 模型&#xff08;如 BERT 和 GPT-3&#xff09;已经给自然语言处理&#xff08;NLP&#xff09;领域带来了革命性的变化。这得益于它们具备并行化能力&…...

【LeetCode: 3159. 查询数组中元素的出现位置 + 统计下标】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

git自动压缩提交的脚本

可以将当前未提交的代码自动执行 git addgit commitgit squash Git 命令安装指南 1. 创建脚本目录 如果目录不存在&#xff0c;创建它&#xff1a; mkdir -p ~/.local/bin2. 创建脚本文件 vim ~/.local/bin/git-squash将完整的脚本代码复制到此文件中。 3. 设置脚本权限…...

uniapp中Nvue白屏问题 ReferenceError: require is not defined

uniapp控制台输出如下 exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught ReferenceError: require is not defined 或者 exception function:createInstanceContext, exception:white s…...

Centos8安装图形化界面

由于Centos8已经停止维护&#xff0c;所以在使用的时候会遇到yum元数据找不到的情况 1、更新yum数据源 进入目录&#xff1a; cd /etc/yum.repos.d/ 修改文件&#xff1a; sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-* sed -i s|#baseurlhttp://mirror.cent…...

2023年厦门市第30届小学生C++信息学竞赛复赛上机操作题(三、2023C. 太空旅行(travel))

#include <bits/stdc.h>using namespace std;struct Ship {int u; // 从地球到火星的时间int v; // 从火星到天王星的时间 };// 自定义比较函数 bool cmp(const Ship &a, const Ship &b) {return a.u max(a.v, b.u) b.v < b.u max(b.v, a.u) a.v; }int ma…...

Doris的SQL原理解析

今天来介绍下Doris的SQL原理解析&#xff0c;主要从语法、解析、分析、执行等几个方面来介绍&#xff0c;可以帮助大家对Doris底层有个清晰的理解~ 一、Doris简介 Apache Doris是一个基于MPP架构的高性能、实时的分析型数据库&#xff0c;能够较好的满足报表分析、即席查询、…...

【RAG实战】语言模型基础

语言模型赋予了计算机理解和生成人类语言的能力。它结合了统计学原理和深度神经网络技术&#xff0c;通过对大量的样本数据进行复杂的概率分布分析来学习语言结构的内在模式和相关性。具体地&#xff0c;语言模型可根据上下文中已出现的词序列&#xff0c;使用概率推断来预测接…...

探索 .idea 文件夹:Java Maven 工程的隐形守护者

一、.idea文件夹深度解析&#xff1a;IntelliJ IDEA项目配置的核心 在Java Maven工程的开发环境中&#xff0c;.idea文件夹扮演着举足轻重的角色。这是IntelliJ IDEA项目特有的一个配置文件夹&#xff0c;它包含了项目所需的各种配置信息&#xff0c;以确保项目能够在不同的开…...

JAVA代理模式和适配器模式

文章目录 Java 代理模式和适配器模式代理模式&#xff08;Proxy Pattern&#xff09;适配器模式&#xff08;Adapter Pattern&#xff09;代理模式和适配器模式的区别 代理模式的使用举例静态代理实现:用代理模式记录方法调用日志动态代理实现:使用 Java 动态代理记录方法调用日…...

Python大数据可视化:基于python大数据的电脑硬件推荐系统_flask+Hadoop+spider

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 价格区间界面 用户信息界面 品牌管理 笔记本管理 电脑主机…...

【YOLOv3】源码(train.py)

概述 主要模块分析 参数解析与初始化 功能&#xff1a;解析命令行参数&#xff0c;设置训练配置项目经理制定详细的施工计划和资源分配日志记录与监控 功能&#xff1a;初始化日志记录器&#xff0c;配置监控系统项目经理使用监控和记录工具&#xff0c;实时跟踪施工进度和质量…...

一维、线性卡尔曼滤波的例程(MATLAB)

这段 MATLAB 代码实现了一维线性卡尔曼滤波器的基本功能&#xff0c;用于估计在存在噪声的情况下目标状态的真实值 文章目录 一维线性卡尔曼滤波代码运行代码介绍1. **初始化部分**2. **数据生成**3. **卡尔曼滤波器实现**4. **结果可视化**5. **统计输出** 源代码 总结 一维线…...

【Rust自学】6.2. Option枚举

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 6.2.1. 什么是Option枚举 它定义于标准库中&#xff0c;在Prelude&#xff08;预导入模块&#xff09;中&#xff0c;负责描述这样的场景…...

unity学习1:第1个template的项目platformer 学习

目录 0 教训&#xff0c;不要学生思路&#xff1a;路径依赖 1 从unity的编辑器里直接下载一个template 2 第一个下马威&#xff1a;下载到本地的这个模板项目第一次运行就报错, 其次关了重进就好了 2.1 报错 2.2 解决 2.3 解决 3 第2个拦路虎&#xff1a; 项目的声音大小…...

初识 Conda:一站式包管理和环境管理工具

文章目录 1. 什么是 Conda&#xff1f;2. 为什么选择 Conda&#xff1f;3. Conda 的安装3.1 安装步骤&#xff08;以 Miniconda 为例&#xff09; 4. Conda 的核心功能4.1 包管理4.2 环境管理4.3 Conda Forge4.4 设置国内镜像 5. 常见使用场景5.1 数据科学项目5.2 离线安装5.3 …...

vue.js 组件化开发 根组件

Vue.js是一个用于构建用户界面的渐进式JavaScript框架。组件化开发是Vue.js的核心理念之一&#xff0c;它允许开发者将部分代码封装为可重用的组件&#xff0c;从而提高代码的复用性和可维护性。而根组件是Vue.js应用的最顶层组件&#xff0c;它包含了其他所有的组件。 下面详…...

ASP.NET WebForms:实现全局异常捕获与处理的最佳实践

在ASP.NET WebForms中&#xff0c;你可以通过以下方法来统一捕获后台异常&#xff1a; 1. 在Global.asax中使用Application_Error Global.asax文件允许你处理应用程序级别的异常。你可以在Application_Error事件中捕获所有未处理的异常&#xff0c;并根据需要记录或处理它们。…...