AES 与 SM4 加密算法:深度解析与对比

news2024/12/14 5:15:26

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea

在这里插入图片描述


在这里插入图片描述

AES 与 SM4 加密算法:深度解析与对比

一、引言

在当今数字化飞速发展的时代,信息安全成为了至关重要的基石。无论是个人的隐私数据、企业的商业机密,还是国家的关键信息,都需要强大的加密技术来保驾护航。加密算法犹如信息世界的守护卫士,将明文数据转化为密文,使得未经授权者难以窥探其中的奥秘。

AES(Advanced Encryption Standard)加密算法,作为全球范围内广泛应用的加密标准,有着举足轻重的地位。它是由美国国家标准与技术研究院(NIST)于 2001 年确定的新一代加密标准,旨在取代旧有的 DES(Data Encryption Standard)算法。AES 凭借其出色的安全性、高效性和广泛的适应性,在众多领域得到了大规模的应用,从网络通信中的数据加密传输,到金融领域的交易安全保障,再到各类电子设备的数据存储加密等,都有 AES 的身影。其加密原理基于对称加密思想,通过多轮的加密变换,将输入的明文逐步转换为难以破解的密文,在不同的密钥长度下(如 128 位、192 位和 256 位),提供了不同级别的安全防护。

SM4 加密算法,则是我国自主研发的一种对称加密算法,在国内的信息安全体系中扮演着核心角色。随着我国信息技术产业的不断崛起和对信息安全自主可控需求的日益增长,SM4 应运而生。它在国内的政务、金融、能源等关键领域有着广泛的应用,保障着我国重要信息基础设施的安全。SM4 算法的设计基于特定的数学结构和变换,通过多轮迭代运算对数据进行加密处理,其密钥长度固定为 128 位,能够有效地抵御多种形式的密码攻击。

在加密算法的浩瀚星空中,AES 和 SM4 无疑是两颗耀眼的明星。深入理解它们的原理、特性、应用场景以及性能差异,对于信息安全领域的专业人士以及广大关注信息安全的用户来说,都具有极为重要的意义。本文将对 AES 和 SM4 加密算法进行全面而深入的探讨,从各个维度对它们进行剖析和对比,为读者揭开这两种加密算法的神秘面纱。

二、AES 加密算法

在这里插入图片描述

2.1 算法概述

AES 是一种对称分组密码算法,这意味着加密和解密过程使用相同的密钥。它对固定长度的数据块(通常为 128 位)进行加密操作。AES 算法的设计目标是提供高强度的安全性、高效的加密和解密速度以及良好的灵活性,以适应不同的应用环境和安全需求。

2.2 加密原理

  • 字节代换(SubBytes):这是 AES 加密的第一步,将输入的 128 位数据块中的每个字节按照一个预先定义的 8 位 S 盒(Substitution Box)进行替换。S 盒的设计具有非线性特性,能够有效地混淆输入数据,增加密码分析的难度。例如,对于一个特定的字节值,通过 S 盒的映射,会得到一个全新的字节值,从而改变了数据的原始表示形式。
  • 行移位(ShiftRows):在字节代换之后,对数据块的行进行循环移位操作。具体来说,第一行保持不变,第二行循环左移 1 个字节位置,第三行循环左移 2 个字节位置,第四行循环左移 3 个字节位置。这种移位操作进一步扩散了数据在不同行之间的关系,使得加密效果更加复杂。
  • 列混合(MixColumns):此步骤将数据块中的每一列看作一个多项式,并与一个固定的多项式进行模乘法运算。通过这种方式,列混合操作在列的方向上对数据进行了再次混淆和扩散,使得数据的各个部分之间的相关性更加难以捉摸。例如,对于一个 4x4 的字节矩阵表示的数据块,每一列的四个字节经过列混合运算后,会得到全新的字节组合。
  • 轮密钥加(AddRoundKey):在每一轮加密中,将前面步骤得到的数据与当前轮的轮密钥进行逐位异或操作。轮密钥是由原始密钥通过密钥扩展算法生成的,每一轮使用不同的轮密钥。这个步骤将密钥信息融入到加密过程中,确保只有拥有正确密钥的接收方才能解密密文。

AES 算法通常会进行多轮这样的加密操作,轮数取决于密钥的长度。对于 128 位密钥,会进行 10 轮加密;192 位密钥进行 12 轮;256 位密钥进行 14 轮。

2.3 应用场景

  • 网络通信安全:在互联网通信中,如 SSL/TLS 协议(用于保障网页浏览、电子邮件等安全通信)的底层部分常采用 AES 加密算法对传输的数据进行加密,防止数据在网络传输过程中被窃取或篡改。例如,当用户在网上购物时,用户的个人信息、信用卡信息等敏感数据在客户端与服务器端之间传输时,会使用 AES 加密,确保这些信息的安全。
  • 金融领域数据保护:银行等金融机构在处理客户的账户信息、交易记录等数据时,广泛应用 AES 加密。无论是数据在内部网络中的传输,还是存储在数据库中的数据,AES 加密都能有效地防止金融数据泄露,保护客户资产安全和金融机构的信誉。例如,银行的网上银行系统在用户登录、转账等操作过程中,相关数据都经过 AES 加密处理。
  • 存储加密:在计算机存储设备上,如硬盘、移动存储介质等,AES 加密用于保护存储在其中的数据。操作系统提供的加密功能,如 Windows 的 BitLocker 和 macOS 的 FileVault,很多时候都采用 AES 加密算法来对磁盘上的数据进行加密存储。这使得即使存储设备丢失或被盗,未经授权的用户也难以获取其中的数据。

2.4 性能特点

  • 加密速度较快:AES 算法在现代计算机硬件上具有较高的加密和解密速度,尤其是在处理大量数据时表现出色。这得益于其相对简单且规整的加密结构,能够充分利用计算机的指令集并行性。例如,在多核处理器的计算机上,AES 加密可以通过多线程并行处理不同的数据块,大大提高了整体的加密效率。
  • 密钥长度灵活:AES 支持 128 位、192 位和 256 位三种不同的密钥长度。较短的密钥长度(如 128 位)在一些对性能要求较高但安全需求相对较低的场景中,可以提供较快的加密速度;而较长的密钥长度(如 256 位)则适用于对安全性要求极高的场景,如军事、国家安全等领域,虽然加密速度相对较慢,但能提供更强的抗攻击能力。

2.5 AES 算法的优势与局限

  • 优势
    • 广泛应用与成熟:AES 是国际上广泛采用的加密标准,经过了多年的实践检验和大量的安全性分析,有众多的加密库和工具支持,在不同的操作系统、编程语言和硬件平台上都能方便地实现。
    • 灵活性:支持多种密钥长度,可以根据不同的安全需求选择合适的密钥长度。例如,对于一般的非敏感数据加密,可以选择 128 位密钥以提高加密效率;而对于高度敏感的数据,如金融交易数据,可以采用 256 位密钥来增强安全性。
    • 高效性:在现代计算机硬件上,AES 算法的加密和解密速度相对较快,尤其是在有专门的硬件加密模块(如 AES-NI 指令集支持的处理器)时,能够显著提高加密和解密的性能。
  • 局限
    • 量子计算威胁:随着量子计算技术的发展,理论上量子计算机有可能在较短时间内破解 AES 算法。虽然目前实用的量子计算机尚未达到能够大规模破解 AES 的水平,但这是未来可能面临的一个潜在风险。
    • 侧信道攻击:AES 算法在某些实现环境下可能面临侧信道攻击,如通过分析加密过程中的功耗、电磁辐射等信息来获取密钥信息。虽然可以通过一些防御措施(如掩码技术等)来降低风险,但这也增加了算法实现的复杂性和成本。

2.6 AES 算法的 Java 代码示例

以下是一个使用 Java 实现 AES 加密算法的简单示例代码:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;

public class AESExample {
    public static void main(String[] args) throws Exception {
        // 生成密钥
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        // 设置密钥长度为 128 位
        keyGenerator.init(128);
        SecretKey secretKey = keyGenerator.generateKey();

        // 实例化加密器
        Cipher cipher = Cipher.getInstance("AES");
        // 初始化加密器为加密模式,传入密钥
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);

        // 待加密的明文
        String plaintext = "Hello, AES Encryption!";
        // 将明文转换为字节数组
        byte[] plaintextBytes = plaintext.getBytes();
        // 进行加密操作
        byte[] ciphertextBytes = cipher.doFinal(plaintextBytes);
        // 将加密后的字节数组转换为 Base64 编码的字符串,方便显示
        String ciphertext = Base64.getEncoder().encodeToString(ciphertextBytes);
        System.out.println("加密后的密文: " + ciphertext);

        // 初始化加密器为解密模式,传入密钥
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        // 对密文进行解码,得到字节数组
        byte[] decodedCiphertextBytes = Base64.getDecoder().decode(ciphertext);
        // 进行解密操作
        byte[] decryptedBytes = cipher.doFinal(decodedCiphertextBytes);
        // 将解密后的字节数组转换为字符串
        String decryptedText = new String(decryptedBytes);
        System.out.println("解密后的明文: " + decryptedText);
    }
}

在上述代码中:

  • 首先使用 KeyGenerator 类生成一个 128 位的 AES 密钥。
  • 然后通过 Cipher 类实例化一个 AES 加密器,并分别初始化为加密模式和解密模式,传入生成的密钥。
  • 对于明文,先转换为字节数组,使用加密器的 doFinal 方法进行加密,得到密文字节数组,再转换为 Base64 编码字符串显示。
  • 解密时,先将 Base64 编码的密文解码为字节数组,再使用解密器的 doFinal 方法进行解密,最后将解密后的字节数组转换为字符串显示。

三、SM4 加密算法

在这里插入图片描述

3.1 算法概述

SM4 是我国自主设计的对称加密算法,采用分组密码体制,分组长度为 128 位,密钥长度也为 128 位。它的设计旨在满足国内信息安全领域对自主可控加密技术的需求,在国内的众多关键信息系统中得到了广泛的应用和推广。

3.2 加密原理

  • 非线性变换(T 函数):SM4 算法的核心是一个名为 T 函数的非线性变换。T 函数将输入的 32 位数据进行一系列复杂的操作,包括非线性替换、线性变换和循环移位等。首先,将输入的 32 位数据分为四个 8 位的子块,对每个子块进行 S 盒替换,这个 S 盒与 AES 的 S 盒类似,具有非线性特性,能够对数据进行混淆。然后,对替换后的结果进行线性变换和循环移位操作,最终得到 T 函数的输出。
  • 轮函数:SM4 的加密过程由 32 轮迭代的轮函数组成。在每一轮中,将 128 位的数据块分为四个 32 位的字,分别记为 X0、X1、X2、X3。轮函数的操作如下:首先计算 T(X0 XOR X1 XOR X2 XOR rk),其中 rk 是当前轮的轮密钥,XOR 表示异或运算。然后将计算结果与 X3 进行异或运算,得到新的 X0。接着,将原来的 X0 赋值给 X1,X1 赋值给 X2,X2 赋值给 X3,开始下一轮的迭代。
  • 密钥扩展:SM4 的密钥扩展算法将 128 位的原始密钥扩展成 32 轮所需的轮密钥。密钥扩展过程中使用了一些特定的常数和变换规则,确保轮密钥之间具有足够的独立性和安全性。

3.3 应用场景

  • 国内政务信息系统:在政府部门的电子政务网络中,大量的公文流转、政务数据存储与传输等环节都采用 SM4 加密算法。例如,政府部门之间的机密文件传输,使用 SM4 加密确保文件内容不被泄露,保障政务工作的安全有序进行。
  • 金融关键业务:国内的一些金融机构,尤其是在涉及核心业务系统和关键数据的处理时,逐渐开始采用 SM4 加密。例如,在金融机构内部的清算系统、核心数据库存储等方面,SM4 加密为金融数据提供了自主可控的安全保障,降低了对国外加密技术的依赖,增强了金融系统的安全性和稳定性。
  • 能源等基础设施领域:在能源行业,如电力、石油等企业的生产管理系统、数据采集与监控系统(SCADA)中,SM4 加密用于保护关键的生产数据、设备控制指令等信息。防止非法入侵和数据篡改,确保能源基础设施的安全稳定运行。

3.4 性能特点

  • 安全性高:SM4 算法经过了严格的安全性分析和测试,能够有效抵御多种密码分析攻击,如差分密码分析、线性密码分析等。其 128 位的密钥长度提供了足够的安全强度,在国内的信息安全体系中能够满足大多数关键应用场景的安全需求。
  • 与国内硬件适配性好:由于是我国自主研发的算法,SM4 在国内自主研发的芯片、加密设备等硬件上往往具有更好的适配性和性能表现。例如,一些国产的安全芯片专门针对 SM4 算法进行了优化设计,能够充分发挥 SM4 的加密性能,提高加密和解密的效率。

3.5 SM4 算法的优势与局限

  • 优势
    • 自主可控:SM4 是我国自主研发的加密算法,具有自主知识产权,在国内一些对信息安全自主性要求较高的领域应用广泛,能够有效保障国内信息系统免受国外加密技术潜在的安全威胁和限制。
    • 性能良好:在软件实现方面,SM4 算法的加密和解密速度相对较快,能够满足大多数国内应用场景的性能需求。并且随着国内硬件技术的发展,针对 SM4 算法的硬件加速模块也在不断研发和完善,将进一步提高其性能。
    • 安全性高:经过了国内相关机构的安全性评估和实践检验,在设计上采用了多种密码学技术来确保算法的安全性,如非线性变换、线性扩散等,能够有效抵御常见的密码分析攻击。
  • 局限
    • 国际应用受限:由于 SM4 是我国自主设计的算法,在国际上的应用相对较少,相关的国际标准和规范中未广泛包含 SM4,这可能导致在一些国际合作项目或涉及国际数据交换的场景中,其兼容性和认可度相对较低。
    • 生态支持相对较弱:与 AES 相比,SM4 的开源库、工具和硬件支持在国际范围内相对较少,开发人员在使用 SM4 算法时可能面临库的功能有限、文档不足等问题,这在一定程度上限制了其更广泛的应用和推广。

3.6 SM4 算法的 Java 代码示例

要在 Java 中使用 SM4 算法,需要引入相关的依赖。这里可以使用 Bouncy Castle 库,它是一个广泛使用的密码学库,支持多种加密算法包括 SM4。在 Maven 项目中,添加以下依赖:

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.72</version>
</dependency>

以下是使用 Bouncy Castle 库实现 SM4 加密算法的示例代码:

import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.engines.SM4Engine;
import org.bouncycastle.crypto.modes.CBCMode;
import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.util.encoders.Base64;

public class SM4Example {
    public static void main(String[] args) throws Exception {
        // 生成 128 位的 SM4 密钥
        byte[] key = new byte[16];
        // 这里可以使用随机数生成器等方式生成真正的密钥
        // 为了示例简单,这里只是简单初始化
        for (int i = 0; i < 16; i++) {
            key[i] = (byte) i;
        }

        // 实例化 SM4 引擎,采用 CBC 模式
        SM4Engine sm4Engine = new SM4Engine();
        CBCMode cbcMode = new CBCMode(sm4Engine);
        PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(cbcMode);

        // 设置密钥参数
        CipherParameters keyParam = new KeyParameter(key);
        cipher.init(true, keyParam);

        // 待加密的明文
        String plaintext = "Hello, SM4 Encryption!";
        // 将明文转换为字节数组
        byte[] plaintextBytes = plaintext.getBytes();
        // 进行加密操作,输出字节数组
        byte[] ciphertextBytes = new byte[cipher.getOutputSize(plaintextBytes.length)];
        int length = cipher.processBytes(plaintextBytes, 0, plaintextBytes.length, ciphertextBytes, 0);
        cipher.doFinal(ciphertextBytes, length);
        // 将加密后的字节数组转换为 Base64 编码的字符串,方便显示
        String ciphertext = Base64.toBase64String(ciphertextBytes);
        System.out.println("加密后的密文: " + ciphertext);

        // 初始化加密器为解密模式,传入密钥
        cipher.init(false, keyParam);
        // 对密文进行解码,得到字节数组
        byte[] decodedCiphertextBytes = Base64.decode(ciphertext);
        // 进行解密操作,输出字节数组
        byte[] decryptedBytes = new byte[cipher.getOutputSize(decodedCiphertextBytes.length)];
        length = cipher.processBytes(decodedCiphertextBytes, 0, decodedCiphertextBytes.length, decryptedBytes, 0);
        cipher.doFinal(decryptedBytes, length);
        // 将解密后的字节数组转换为字符串
        String decryptedText = new String(decryptedBytes);
        System.out.println("解密后的明文: " + decryptedText);
    }
}

在上述代码中:

  • 首先生成一个 128 位的 SM4 密钥(这里只是简单示例,实际应用中应使用安全的密钥生成方式)。
  • 然后实例化 SM4 引擎,并采用 CBC(Cipher Block Chaining)模式,通过 PaddedBufferedBlockCipher 类来进行加密操作。
  • 对于明文,转换为字节数组后进行加密,得到密文字节数组并转换为 Base64 编码字符串显示。
  • 解密时,先将 Base64 编码的密文解码,然后进行解密操作,最后将解密后的字节数组转换为字符串显示。

四、AES 与 SM4 的性能差异

4.1 加密速度对比

  • 在通用计算机平台上,AES 由于其广泛的应用和长期的优化,在一些常见的硬件环境下,如英特尔 x86 架构处理器,其加密速度相对较快。尤其是在处理大量数据时,AES 的多轮加密结构和对硬件指令集的良好利用,使其能够高效地完成加密任务。例如,在对大文件进行加密存储时,AES 可能比 SM4 花费更少的时间。
  • 然而,在一些国产自主研发的特定硬件平台上,尤其是针对 SM4 进行了优化设计的芯片或加密设备,SM4 的加密速度可能会超过 AES。这些硬件平台能够充分发挥 SM4 算法的特性,通过专门的电路设计和指令优化,实现高效的加密运算。

4.2 安全性对比

  • AES 作为国际通用的加密标准,经过了多年的全球范围内的密码分析和攻击测试,在不同的密钥长度下都具有较高的安全性。其复杂的加密结构和多轮变换有效地抵御了各种已知的密码攻击方法。例如,在面对差分密码分析和线性密码分析时,AES 的设计使得攻击者难以找到有效的攻击路径。
  • SM4 同样具有很高的安全性,其 128 位的密钥长度和独特的加密结构能够抵御多种常见的密码攻击。并且,由于是我国自主研发的算法,其内部结构和算法细节相对保密,减少了被外部针对性攻击的风险。在国内的关键信息系统中,SM4 已经被证明能够有效地保护重要信息的安全。

4.3 资源占用对比

  • AES 在通用软件实现时,对计算机的内存和计算资源的占用相对较为稳定。其算法的复杂度决定了在不同的运行环境下,其资源消耗有一定的规律可循。例如,在普通的个人电脑上运行 AES 加密程序时,内存占用量和 CPU 使用率在加密过程中会有一个相对可预测的变化范围。
  • SM4 在一些国产硬件平台上可能具有资源占用优势,因为这些硬件平台可以针对 SM4 进行定制化的资源分配和优化。但在通用的国外硬件平台上,由于缺乏专门的优化,其资源占用可能会相对较高,例如可能会占用更多的 CPU 时间来完成相同的加密任务。

五、结论

AES 和 SM4 作为两种重要的对称加密算法,各自有着独特的优势和特点。AES 在国际上广泛应用,具有成熟的技术生态和较高的通用性,在多种通用硬件平台上表现出良好的加密速度和性能。而 SM4 作为我国自主研发的加密算法,在国内的关键信息领域发挥着不可替代的作用,其与国内硬件的适配性以及自主可控性为我国的信息安全提供了坚实的保障。

在未来的信息安全发展中,随着全球信息技术格局的不断变化和我国信息安全战略的深入推进,AES 和 SM4 可能会在不同的场景下继续发挥各自的作用,并且两者之间也可能会相互借鉴和融合。例如,在一些跨国企业的全球信息系统中,可能会同时考虑使用 AES 来满足国际业务的兼容性需求,以及 SM4 来保障在国内部分业务的自主安全。对于信息安全领域的从业者和研究人员来说,深入理解这两种算法的原理、性能和应用场景,将有助于更好地构建安全可靠的信息系统,应对日益复杂的信息安全挑战。

六、参考资料文献

AES 官方文档
SM4 官方文档
密码学相关书籍,如《密码编码学与网络安全:原理与实践》

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

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

相关文章

视频怎么转音频mp3?5种视频转音频的方法

在视频剪辑时&#xff0c;将视频中的音频提取出来并转换为MP3格式已成为许多人的需求。无论是为了制作音乐播放列表、剪辑音频片段&#xff0c;还是为了在其他设备上更方便地播放&#xff0c;将视频转换为音频MP3都显得尤为重要。下面将介绍五种实用的方法&#xff0c;帮助你轻…

Maven学习(传统Jar包管理、Maven依赖管理(导入坐标)、快速下载指定jar包)

目录 一、传统Jar包管理。 &#xff08;1&#xff09;基本介绍。 &#xff08;2&#xff09;传统的Jar包导入方法。 1、手动寻找Jar包。并放置到指定目录下。 2、使用IDEA的库管理功能。 3、配置环境变量。 &#xff08;3&#xff09;传统的Jar包管理缺点。 二、Maven。 &#…

【机器学习】分类器

在机器学习(Machine Learning&#xff0c;ML)中&#xff0c;分类器泛指算法或模型&#xff0c;用于将输入数据分为不同的类别或标签。分类器是监督学习的一部分&#xff0c;它依据已知的数据集中的特征和标签进行训练&#xff0c;并根据这些学习到的知识对新的未标记数据进行分…

uni-app在image上绘制点位并回显

在 Uni-app 中绘制多边形可以通过使用 Canvas API 来实现。Uni-app 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;同时支持编译为 H5、小程序等多个平台。由于 Canvas 是 H5 和小程序中都支持的 API&#xff0c;所以通过 Canvas 绘制多边形是一个比较通用的方法。 1.…

【机器学习与数据挖掘实战】案例01:基于支持向量回归的市财政收入分析

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支&#xff0c;专注于让计算机系统通过数据学习和改进。它利用统计和计算方法&#xff0c;使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数…

Spire.PDF for .NET【页面设置】演示:向 PDF 文档添加页码

在 PDF 文档中添加页码不仅实用&#xff0c;而且美观&#xff0c;因为它提供了类似于专业出版材料的精美外观。无论您处理的是小说、报告还是任何其他类型的长文档的数字副本&#xff0c;添加页码都可以显著提高其可读性和实用性。在本文中&#xff0c;您将学习如何使用Spire.P…

【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(三)

目录 ARC规则 概要 所有权修饰符 __strong修饰符 __weak修饰符 __unsafe_unretained修饰符 __autoreleasing修饰符 ARC规则 概要 “引用计数式内存管理”的本质部分在ARC中并没有改变&#xff0c;ARC只是自动地帮助我们处理“引用计数”的相关部分。 在编译单位上可以…

An error happened while trying to locate the file on the Hub and we cannot f

An error happened while trying to locate the file on the Hub and we cannot find the requested files in the local cache. Please check your connection and try again or make sure your Internet connection is on. 关于上述comfy ui使用control net预处理器的报错问…

angular19-官方教程学习

周日了解到angular已经更新到19了&#xff0c;想按官方教程学习一遍&#xff0c;工欲善其事必先利其器&#xff0c;先更新工具&#xff1a; 安装新版版本 卸载老的nodejs 20.10.0&#xff0c;安装最新的LTS版本 https://nodejs.org 最新LTS版本已经是22.12.0 C:\Program File…

计算机毕业设计Python+Vue.js游戏推荐系统 Steam游戏推荐系统 Django Flask 游 戏可视化 游戏数据分析 游戏大数据 爬虫 机

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

上海亚商投顾:创业板指震荡调整 机器人概念股再度爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日冲高回落&#xff0c;深成指、创业板指盘中跌超1%&#xff0c;尾盘跌幅有所收窄。机器人概念股逆势爆…

粘贴可运行:Java调用大模型(LLM) 流式Flux stream 输出;基于spring ai alibaba

在Java中&#xff0c;使用Spring AI Alibaba框架调用国产大模型通义千问&#xff0c;实现流式输出&#xff0c;是一种高效的方式。通过Spring AI Alibaba&#xff0c;开发者可以轻松地集成通义千问模型&#xff0c;并利用其流式处理能力&#xff0c;实时获取模型生成的文本。这…

【CSS in Depth 2 精译_070】11.3 利用 OKLCH 颜色值来处理 CSS 中的颜色问题(下):从页面其他颜色衍生出新颜色

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 11.1.1 模式的建立11.1.2 还原设计稿 11.2 颜色的定义 11.2.1 色域与色彩空间11.2.2 CSS 颜色表示法 11.2.2.1 RGB…

Ajax--实现检测用户名是否存在功能

目录 &#xff08;一&#xff09;什么是Ajax &#xff08;二&#xff09;同步交互与异步交互 &#xff08;三&#xff09;AJAX常见应用情景 &#xff08;四&#xff09;AJAX的优缺点 &#xff08;五&#xff09;使用jQuery实现AJAX 1.使用JQuery中的ajax方法实现步骤&#xf…

【PSINS】以速度和位置作为观测量(即6维观测量)的组合导航滤波,EKF实现,提供可直接运行的MATLAB代码

原有的代码是以位置作为观测量的,这里提供位置+速度,共6维的观测量,状态量还是15维不变 文章目录 源代码运行结果PS源代码 源代码如下: % 【PSINS】位置与速度为观测的153,EKF。从速度观测的EKF153改进而来 % 2024-12-11/Ver1:位置与速度为观测量% 清空工作空间,清除命…

探索云原生安全解决方案的未来

我们是否充分意识到云端所面临的网络安全威胁&#xff1f; 在当今互联互通的世界中&#xff0c;维护安全的环境至关重要。云的出现扩大了潜在威胁的范围&#xff0c;因为它催生了机器身份&#xff08;称为非人类身份 (NHI)&#xff09;及其秘密。随着组织越来越多地转向云原生…

无法正常启动此程序,因为计算机丢失wlanapi.dll

wlanapi.dll丢失怎么办&#xff1f;有没有什么靠谱的修复wlanapi.dll方法_无法启动此程序,因为计算机中丢失wlanapi.dll-CSDN博客 wlanapi.dll是 Windows 操作系统中的一个动态链接库文件&#xff0c;主要与 Windows 无线 LAN (WLAN) API 相关。该DLL提供了许多必要的函数&…

ADC -DMA

文章目录 前言一、ADC配置修改二、配置DMA三、DMA中断四、完整参考代码总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 项目需要&#xff1a; 在原有基础上改进&#xff0c;采用DMA中断采集数据 提示&#xff1a;以下是本篇文章正文内容&#xff0…

Referer头部在网站反爬虫技术中的运用

网站数据的安全性和完整性至关重要。爬虫技术&#xff0c;虽然在数据收集和分析中发挥着重要作用&#xff0c;但也给网站管理员带来了挑战。为了保护网站数据不被恶意爬取&#xff0c;反爬虫技术应运而生。本文将探讨HTTP头部中的Referer字段在反爬虫技术中的应用&#xff0c;并…

docker搭建haproxy实现负载均衡

华子目录 获取haproxy镜像建立haproxy容器的数据卷获取haproxy的配置文件编写yaml文件运行测试 获取haproxy镜像 [rootdocker-node1 ~]# docker pull haproxy:2.3建立haproxy容器的数据卷 conf目录为数据卷 [rootdocker-node1 ~]# mkdir /var/lib/docker/volumes/conf/获取h…