一文带你学习“国密算法”

news2024/11/18 7:52:19

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌

Java知识图谱点击链接:体系化学习Java(Java面试专题)

💕💕 感兴趣的同学可以收藏关注下不然下次找不到哟💕💕

在这里插入图片描述

文章目录

  • 1、国密算法分类
  • 2、SM1 算法
  • 3、SM2 算法
    • 3.1、SM2 算法简介
    • 3.2、SM2 算法的原理
    • 3.3、SM2算法的安全性
    • 3.4、SM2 算法 java 运用
  • 4、SM3 算法
    • 4.1、SM3 算法简介
    • 4.2、SM3算法的原理
    • 4.3、SM3算法的安全性
    • 4.4、SM3 算法 java 运用
  • 5、SM4 算法
    • 5.1、SM4 算法简介
    • 5.2、SM4 算法特点
    • 5.3、SM4 算法的 java 运用
  • 6、SM7算法
  • 7、SM9算法

1、国密算法分类

国密算法主要分为以下四类:

  1. 对称加密算法:SM1、SM4

  2. 非对称加密算法:SM2、SM9

  3. 杂凑算法:SM3

  4. 签名算法:SM2、SM3、SM4

其中,SM1 和 SM4 是对称加密算法,SM2 和 SM9 是非对称加密算法,SM3 是杂凑算法,SM2、SM3、SM4 是签名算法。这些算法都是由中国密码学专家团队自主研发的,被广泛应用于我国政府、军队、金融、电信等领域的信息安全保护中。

2、SM1 算法

SM1 算法是一种对称加密算法,也称为国密 SM1 算法,是中国密码学家自主研发的一种块加密算法,是国家密码管理局公布的商用密码算法标准之一。SM1 算法采用了分组密码体系结构,每个分组的长度为 128 比特,密钥长度为 128 比特,是一种轻量级的加密算法,适用于低功耗、低带宽、低存储等资源受限环境下的数据加密和保护。

SM1 算法的加密过程主要包括以下四个步骤:

  1. 密钥扩展:将输入的 128 比特密钥扩展为 32 个 32 比特的子密钥,用于后续的加密过程。

  2. 初始置换:将输入的明文按照一定的规则进行置换,生成新的分组。

  3. 轮函数:将上一轮生成的分组和当前轮的子密钥进行异或运算,并通过 S 盒和 P 盒进行置换和替换,生成新的分组。

  4. 逆置换:将最后一轮生成的分组按照一定的规则进行逆置换,得到最终的密文。
    SM1 算法的安全性得到了广泛认可,已被广泛应用于金融、电子政务、物联网等领域的数据加密和保护中。

3、SM2 算法

3.1、SM2 算法简介

SM2 算法是中国密码学家自主设计的一种非对称加密算法,是国家商用密码算法,具有高效、安全、公开透明等特点。SM2 算法是基于椭圆曲线密码体制的一种公钥密码算法,用于数字签名、密钥协商和加密等场景。

SM2 算法的安全性基于椭圆曲线离散对数问题,其密钥长度为 256 位,比 RSA 算法的密钥长度短,但安全性更高。SM2 算法不仅具有高效、安全的特点,还具有公开透明、自主可控的特点,符合国家信息安全要求。

SM2 算法在数字签名、密钥协商和加密等场景中都有应用。在数字签名方面,SM2 算法支持国密标准的数字证书和证书链,可以用于保证电子文档的真实性和完整性;在密钥协商方面,SM2 算法可以用于安全地生成会话密钥,保障通信的机密性和完整性;在加密方面,SM2 算法可以用于保护敏感数据的机密性。

SM2 算法是一种高效、安全、公开透明的密码算法,具有自主可控的特点,是中国自主设计的一种重要的密码算法。

3.2、SM2 算法的原理

SM2算法是一种基于椭圆曲线密码学的公钥密码算法,是中国密码算法标准的一部分。SM2算法的实现原理如下:

  1. 椭圆曲线参数的选择:SM2算法使用的是一种特定的椭圆曲线,其参数由国家密码管理局(CMCA)和国家密码管理办公室(NSA)联合指定。这些参数包括曲线方程、基点坐标、模数等。
  2. 密钥生成:SM2算法的密钥对由公钥和私钥组成。公钥是由基点和私钥生成的,私钥是一个随机数。
  3. 数字签名:SM2算法的数字签名过程分为两步。第一步是计算消息的哈希值,第二步是使用私钥对哈希值进行签名。签名过程中还需要使用一些随机数和椭圆曲线运算。
  4. 验证数字签名:SM2算法的数字签名验证过程也分为两步。第一步是计算消息的哈希值,第二步是使用公钥对签名进行验证。验证过程中也需要使用一些随机数和椭圆曲线运算。
  5. 密钥交换:SM2算法的密钥交换过程使用了一种基于Diffie-Hellman密钥交换的协议,但是使用了椭圆曲线密码学的技术来保证安全性。

SM2算法的实现原理是基于椭圆曲线密码学的技术,使用了一些复杂的数学运算和协议来保证安全性和可靠性。由于SM2算法是一种非常安全和高效的公钥密码算法,已经被广泛应用于各种数字安全场景中。

3.3、SM2算法的安全性

SM2算法是一种基于椭圆曲线密码学的公钥密码算法,其安全性得到了广泛认可。下面是SM2算法的安全性特点:

  1. 安全强度高:SM2算法采用了一种特定的椭圆曲线,其模数长度为256位,远高于传统RSA算法的安全强度。这使得SM2算法能够抵御各种暴力破解和穷举攻击。
  2. 难以被破解:SM2算法使用了一些复杂的数学运算和协议,包括椭圆曲线点的加法、倍乘、离散对数等。这些运算难以被破解,使得SM2算法具有很高的安全性。
  3. 安全性可验证:SM2算法的安全性经过了严格的评估和验证,包括安全性证明、攻击模型分析、实现安全性等方面。这些验证保证了SM2算法的安全性和可靠性。
  4. 适用性广泛:SM2算法已经被广泛应用于各种数字安全场景中,包括数字签名、密钥交换、身份认证等。其安全性和可靠性得到了实践的检验。

SM2算法是一种非常安全和高效的公钥密码算法,其安全性得到了广泛认可和验证。在实际应用中,我们需要遵循相关的规范和标准,以确保SM2算法的安全性和可靠性。

3.4、SM2 算法 java 运用

用 java 实现如下:

package com.pany.camp.encryption;

import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.CryptoException;
import org.bouncycastle.crypto.generators.ECKeyPairGenerator;
import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.params.ECKeyGenerationParameters;
import org.bouncycastle.crypto.params.ParametersWithRandom;
import org.bouncycastle.crypto.signers.SM2Signer;
import org.bouncycastle.jce.ECNamedCurveTable;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec;
import org.bouncycastle.util.encoders.Hex;

import java.security.SecureRandom;
import java.security.Security;

/**
 *
 * @description: SM2 算法
 * @copyright: @Copyright (c) 2022 
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0 
 * @createTime: 2023-06-24 22:37
 */
public class SM2Example {
    public static void main(String[] args) throws CryptoException {
        Security.addProvider(new BouncyCastleProvider());

        // 生成密钥对
        AsymmetricCipherKeyPair keyPair = generateKeyPair();

        // 明文消息
        byte[] message = "Hello, SM2!".getBytes();
        // 签名消息
        byte[] signature = sign(message, keyPair.getPrivate());

        // 验证签名
        boolean verified = verify(message, signature, keyPair.getPublic());

        System.out.println("Message: " + new String(message));
        System.out.println("Signature: " + Hex.toHexString(signature));
        System.out.println("Verified: " + verified);
    }

    private static AsymmetricCipherKeyPair generateKeyPair() {
        // 创建ECDomainParameters对象
        ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec("secp256k1");
        ECDomainParameters domainParams = new ECDomainParameters(spec.getCurve(), spec.getG(), spec.getN(), spec.getH());

        // 定义密钥生成参数
        ECKeyGenerationParameters keyGenParams = new ECKeyGenerationParameters(
                domainParams, new SecureRandom());
        // 生成密钥对
        ECKeyPairGenerator keyPairGenerator = new ECKeyPairGenerator();
        keyPairGenerator.init(keyGenParams);
        return keyPairGenerator.generateKeyPair();
    }

    private static byte[] sign(byte[] message, CipherParameters privateKey) throws CryptoException {
        // 定义 SM2 签名器
        SM2Signer signer = new SM2Signer();
        // 初始化签名器
        signer.init(true, new ParametersWithRandom(privateKey, new SecureRandom()));
        // 计算签名
        signer.update(message, 0, message.length);
        return signer.generateSignature();
    }

    private static boolean verify(byte[] message, byte[] signature, CipherParameters publicKey) {
        // 定义 SM2 签名器
        SM2Signer signer = new SM2Signer();
        // 初始化签名器
        signer.init(false, publicKey);
        // 验证签名
        signer.update(message, 0, message.length);
        return signer.verifySignature(signature);
    }
}

4、SM3 算法

4.1、SM3 算法简介

SM3算法是中国密码学家设计的一种哈希算法,属于国密算法之一,是SHA-3算法的候选算法之一。SM3算法的设计目标是提供一个高安全性、高效率的哈希算法,适用于数字签名、认证和数据完整性校验等场景。SM3算法的设计和实现都经过了严格的安全评估和测试,已被广泛应用于政务、金融、电子商务等领域。

SM3算法的核心思想是基于Merkle-Damgård结构的迭代哈希算法,其输入和输出都是固定长度的二进制串。SM3算法的输入可以是任意长度的消息,经过填充、分组、迭代处理和输出处理等步骤,最终生成一个256位的哈希值。

SM3算法的安全性主要基于以下几个方面:

  1. 消息填充:SM3算法采用了与SHA-256相似的消息填充方式,能够有效地避免碰撞攻击和长度扩展攻击等攻击方式。
  2. 迭代处理:SM3算法采用了64轮的迭代处理,每轮都包括了多个基本运算,增加了攻击者的攻击难度。
  3. 置换、置换压缩和非线性函数:SM3算法采用了多种置换、置换压缩和非线性函数,增加了攻击者的攻击难度。

总体来说,SM3算法是一种高安全性、高效率的哈希算法,已被广泛应用于国内外各个领域,是中国自主研发的密码学算法之一。

4.2、SM3算法的原理

SM3算法是一种哈希函数,用于将任意长度的消息转换为固定长度的摘要。SM3算法的原理如下:

  1. 消息填充:SM3算法首先对输入的消息进行填充,使得消息长度满足一定的要求。填充过程包括添加一个1和若干个0,以及添加消息长度的二进制表示。
  2. 消息分组:填充后的消息被分成若干个固定长度的分组,每个分组的长度为512位。
  3. 初始值设置:SM3算法使用一些常量和随机数来初始化哈希值。这些常量和随机数由国家密码管理局(CMCA)和国家密码管理办公室(NSA)联合指定。
  4. 压缩函数:SM3算法使用一种特定的压缩函数来将每个分组与当前的哈希值进行混合。压缩函数包括若干轮迭代和一些逻辑运算,以保证哈希值的混淆性和扩散性。
  5. 最终处理:所有分组处理完后,将最终的哈希值输出作为消息的摘要。

SM3算法的原理是基于分组密码和哈希函数的技术,使用了一些复杂的数学运算和协议来保证安全性和可靠性。由于SM3算法具有很高的安全性和可靠性,已经被广泛应用于各种数字安全场景中,如数字签名、消息认证等。

4.3、SM3算法的安全性

SM3算法是一种哈希函数,其安全性得到了广泛认可。下面是SM3算法的安全性特点:

  1. 抗碰撞:SM3算法能够将任意长度的消息转换为固定长度的摘要,且不同的消息产生相同摘要的概率极小,因此SM3算法具有很高的抗碰撞能力。
  2. 抗预像攻击:SM3算法能够在不知道摘要原始消息的情况下,难以找到与摘要相对应的原始消息,因此具有很高的抗预像攻击能力。
  3. 抗第二原像攻击:SM3算法能够在已知一条消息的摘要的情况下,难以找到另一条消息,使得它们的摘要相同,因此具有很高的抗第二原像攻击能力。
  4. 安全性可验证:SM3算法的安全性经过了严格的评估和验证,包括安全性证明、攻击模型分析、实现安全性等方面。这些验证保证了SM3算法的安全性和可靠性。

SM3算法是一种非常安全和高效的哈希函数,其安全性得到了广泛认可和验证。在实际应用中,我们需要遵循相关的规范和标准,以确保SM3算法的安全性和可靠性。

4.4、SM3 算法 java 运用

用 java 实现如下:

package com.pany.camp.encryption;

import org.bouncycastle.crypto.digests.SM3Digest;
import org.bouncycastle.util.encoders.Hex;

/**
 *
 * @description:  SM3算法
 * @copyright: @Copyright (c) 2022 
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0 
 * @createTime: 2023-06-24 22:55
 */
public class SM3Example {

    public static String encrypt(String str) {
        byte[] bytes = str.getBytes();
        byte[] result = new byte[32];
        SM3Digest sm3 = new SM3Digest();
        sm3.update(bytes, 0, bytes.length);
        sm3.doFinal(result, 0);
        return Hex.toHexString(result);
    }

    public static void main(String[] args) {
        String str = "hello world";
        String result = SM3Example.encrypt(str);
        System.out.println(result);
    }
}

输出如下:

44f0061e69fa6fdfc290c494654a05dc0c053da7e5c52b84ef93a9d67d3fff88

Process finished with exit code 0

5、SM4 算法

5.1、SM4 算法简介

SM4算法是一种对称加密算法,也称为国密算法。它是由中国密码学家提出的一种分组密码算法,被中国政府采用为商用密码算法,并被纳入ISO/IEC标准。SM4算法的安全性和效率都得到了广泛认可,已经被广泛应用于各种加密场景中。

SM4算法采用128位密钥和128位分组长度,具有高强度的安全性和较快的加解密速度。它的加密过程包括4轮加密和4轮密钥扩展,解密过程与加密过程相似,但需要按照相反的顺序进行。SM4算法的密钥长度为128位,可以保证足够的安全性,同时也便于密钥的管理和存储。

5.2、SM4 算法特点

SM4算法的特点如下:

  1. 高强度的安全性:SM4算法采用了分组密码的结构,通过多轮迭代和置换运算,使得密文与明文之间的关系非常复杂,难以破解。
  2. 高效的加解密速度:SM4算法采用了高效的S-box代换和线性变换,使得加解密速度较快,适合于各种加密场景。
  3. 简单易用的密钥管理:SM4算法的密钥长度为128位,可以保证足够的安全性,同时也便于密钥的管理和存储。
  4. 适用于各种加密场景:SM4算法可以应用于各种加密场景,包括数据加密、通信加密、电子签名、数字证书等。

总之,SM4算法是一种安全性高、效率高、易用性好的加密算法,已经被广泛应用于各种加密场景中。

5.3、SM4 算法的 java 运用

package com.pany.camp.encryption;

import org.bouncycastle.crypto.engines.SM4Engine;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.util.encoders.Hex;

/**
 *
 * @description:  SM4算法
 * @copyright: @Copyright (c) 2022 
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0 
 * @createTime: 2023-06-25 8:32
 */
public class SM4Example {

    public static void main(String[] args) {
        byte[] key = Hex.decode("0123456789abcdeffedcba9876543210");
        byte[] plaintext = Hex.decode("681edf34d206965e86b3e94f536e4246");
        SM4Engine engine = new SM4Engine();
        engine.init(true, new KeyParameter(key));
        byte[] ciphertext = new byte[plaintext.length];
        engine.processBlock(plaintext, 0, ciphertext, 0);
        System.out.println("Cipher text: " + Hex.toHexString(ciphertext));
    }
}

在此示例中,我们使用了Bouncy Castle密码库来实现SM4算法。我们首先将密钥和明文转换为字节数组,然后初始化SM4引擎并使用密钥对其进行配置。最后,我们将明文传递给引擎以加密它,并将结果打印到控制台上。

运行结果:

Cipher text: f324184f3c8892b72bdc9d7c612919de

Process finished with exit code 0

6、SM7算法

SM7是中国密码算法标准的一部分,是一种对称密钥加密算法。它是在SM4算法的基础上开发的,由中国密码管理局(CMCA)和国家密码管理办公室(NSA)联合发布。SM7算法具有更高的安全性和更强的抗攻击能力,可用于保护国家机密和商业机密等重要信息。

SM7算法使用了类似于SM4算法的分组密码结构,但是分组长度为256位。它采用了一种新的密钥扩展算法,可以生成更强的密钥。此外,SM7还使用了一种新的置换算法,可以增强其抗攻击能力。

SM7算法还具有多种加密模式,包括ECB、CBC、CFB和OFB等。它还支持多种填充模式,包括零填充、PKCS#5填充和ISO/IEC 7816-4填充等。

总之,SM7算法是一种非常安全的加密算法,可以用于保护各种重要信息。它已经成为了中国密码算法标准的一部分,并且在国际上也得到了广泛的认可和应用。

目前还没有开源的SM7算法的Java实现,因为SM7算法是中国密码算法标准的一部分,受到国家保密法的保护,因此它的实现和使用受到了严格的限制。

7、SM9算法

SM9算法是中国密码算法标准的一部分,是一种基于椭圆曲线密码学的公钥密码算法,也被称为“超越式密码算法”。它由中国密码管理局(CMCA)和国家密码管理办公室(NSA)联合发布,可用于数字签名、密钥交换和身份认证等应用场景。

SM9算法的主要特点是具有高度的安全性、高效性和灵活性。它使用了一种新的椭圆曲线加密算法,可以在保证安全性的同时提高加密和解密的效率。此外,SM9算法还具有多种身份认证方式,包括基于ID的认证、基于证书的认证和基于密码的认证等。

SM9算法还支持多种密钥交换方式,包括基于Diffie-Hellman密钥交换的方式和基于椭圆曲线密码学的方式等。它还具有多种数字签名方式,包括基于SM3哈希算法的数字签名和基于椭圆曲线密码学的数字签名等。

总之,SM9算法是一种非常安全、高效和灵活的公钥密码算法,适用于各种数字安全应用场景。它已经成为了中国密码算法标准的一部分,并且在国际上也得到了广泛的认可和应用。

由于SM9算法是一种新的公钥密码算法,目前还没有公开的Java实现。
在这里插入图片描述

💕💕 本文由激流原创,首发于CSDN博客,博客主页 https://blog.csdn.net/qq_37967783?spm=1010.2135.3001.5421
💕💕喜欢的话记得点赞收藏啊

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

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

相关文章

ES6--一

1、ES6之includes()方法 Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似。 一般常用这种写法 : [1,2,3].includes(2) 表示2在不在 前面的数组里 项目里 参数 1)第一个参数是要…

VUE L 计算监视属性 ⑥

目录 文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持✨ V u e j s Vuejs Vuejs计算属性 C o m p u t e d Computed Computed监视属性 W a t c h Watch Watch总结 文章有误请指正,如果觉得对你有用,…

SpringBoot 实现 elasticsearch 索引操作(RestHighLevelClient 的应用)

文章目录 0. 引入依赖1. 实例创建与关闭2. 创建索引3. 测试索引库存在不存在4. 删除索引库5. 遍历导入数据6. 批量导入数据(推荐) RestHighLevelClient 是 Elasticsearch 官方提供的Java高级客户端,用于与Elasticsearch集群进行交互和执行各种…

基于Java+Swing实现中国象棋游戏

基于JavaSwing实现中国象棋游戏 一、系统介绍二、功能展示三、其他系统四、获取源码 前言 中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史。由于用具简单,趣味性强,成为流行极为广泛的棋艺活动。 …

操作系统之死锁详解

本文已收录于专栏 《自考》 目录 背景介绍死锁的前提死锁的概念死锁的分类死锁的产生原因条件 死锁的解决预防避免检测与恢复 死锁的实现总结提升 背景介绍 最近一直在做操作系统的测试题,在做题的过程中发现有很多地方涉及到了关于死锁的知识点。今天就回归课本来自…

机器学习——手写数据集的介绍以及案例讲解

系列文章目录 机器学习聚类——DBSCAN(Density-based spatial clustering of applications with noise,基于密度的聚类算法) 机器学习集成学习——Adaboost分离器算法 机器学习聚类算法——BIRCH算法、DBSCAN算法、OPTICS算法 机器学习的…

“交通·未来”第27期:基于随机效应机器学习的多区域居民出行模式选择分析...

2020年6月份,公众号正式推出了“交通未来”系列线上公益学术活动等你来~, 2023年,新起航新征程,我们继续前行~ 6月24日下午15:30,我们将迎来活动的第27期。 1、讲座主题 基于随机效应机器学习的多区域居民出行模式选择…

工作三--知识点

1、split 切割字符串 2、includes 而不是写成 if(useContext pm_global_teamrole_project_manager || pm_global_teamrole_task_manager || pm_global_teamrole_task_parent_manager) 因为 的 优先级 高于 ||,这样写 只能 前面的&…

大数据学习(3)

大数据学习(3) 1 Hive-SQL-DML语句1.1 Hive SQL Load 加载数据语句1.1.1 Load功能1.1.2 Load语法规则1.1.3 Load 语法实验1.1.3.1 Load Data From Local FS1.1.3.2 Load Data From HDFS1.1.3.3 Overwrite选项 1.2 Hive SQL Insert 插入数据语句1.3 Hive …

河道垃圾自动识别监测算法 opencv

河道垃圾自动识别监测系统通过pythonopencv网络模型技术,河道垃圾自动识别监测算法对水面上的垃圾进行自动识别,一旦发现垃圾污染将自动发出警报。OpenCV基于C实现,同时提供python, Ruby, Matlab等语言的接口。OpenCV-Python是OpenCV的Python…

Win10文件夹选项在哪里打开?Win10文件夹选项打开方法

Win10文件夹选项在哪里打开?Win10电脑中用户不知道在哪里才能打开文件夹选项,这时候用户随意打开Win10电脑上的一个文件夹,然后点击右上角的选项,打开之后就能打开文件夹选项了,也可以打开电脑的运行窗口,在…

自动化漏洞猎人代码分析

0x00 前言 安全人员可以扫描,网络上悬赏网站等的漏洞,如果能够发现其存在着安全漏洞,则可以通过提交漏洞的方式来获得一定的赏金,国外的这类悬赏的网站比较多,比如hackone,这上面列出了大量的资产信息&…

你不得不知道的箭头函数和普通函数使用区别!

前言 箭头函数是 ES6 新增的一种函数类型,它采用箭头 > 定义函数,也称为 lambda 函数。箭头函数语法更为简洁,用起来很是方便顺手。 但它存在一些需要注意的问题和局限性。在实际使用时,我们需要根据具体情况来选择合适的函数…

【夜深人静学数据结构与算法 | 第九篇】栈与队列

目录 ​前言: 栈: 栈的实际应用: 队列: 队列的实际应用: 总结: 前言: 栈与队列是我们学习的两个经典的数据结构,这两个数据结构应用广泛,在计算机内有很多底层应用…

操作系统2——进程的描述与控制

本系列博客重点在深圳大学操作系统课程的核心内容梳理,参考书目《计算机操作系统》(有问题欢迎在评论区讨论指出,或直接私信联系我)。 梗概 本篇博客主要介绍操作系统第二章进程的描述与控制的相关知识。 目录 一、前驱图与程序…

大数据从0到1的完美落地之Flume案例1

案例演示 案例演示:AvroMemoryLogger Avro Source:监听一个指定的Avro端口,通过Avro端口可以获取到Avro client发送过来的文件,即只要应用程序通过Avro端口发送文件,source组件就可以获取到该文件中的内容,输出位置为…

数据库详细讲解--下

数据库详细讲解–下 mysql 表外连接 外连接 1.左外连接(如果左侧的表完全显示我们就说是左外连接) 2.右外连接(如果右侧的表完全显示我们就说是右外连接) 3.使用左连接(显示所有人的成绩,如果没有成绩…

4自由度并联机器狗实现行走功能

1. 功能说明 本文示例将实现R328a样机4自由度并联机器狗行走的功能。 2. 电子硬件 在这个示例中,我们采用了以下硬件,请大家参考: 主控板 Basra主控板(兼容Arduino Uno)‍ 扩展板 Bigfish2.1扩展板‍ 电池7.4V锂电池 …

【Linux】进程优先级 进程切换 环境变量

目录 一、进程优先级 1、优先级概念 2、优先级特点 3、修改Linux下的优先级 二、进程切换 1、进程特性 2、进程切换 三、环境变量 1、基本概念 2、常见环境变量 3、查看环境变量方法 4、PATH环境变量 5、和环境变量相关的命令 6、环境变量的组织方式 7、通过代码如何获取环境…

io.netty学习(十一)Reactor 模型

目录 前言 传统服务的设计模型 NIO 分发模型 Reactor 模型 1、Reactor 处理请求的流程 2、Reactor 三种角色 单Reactor 单线程模型 1、消息处理流程 2、缺点 单Reactor 多线程模型 1、消息处理流程 2、缺点 主从Reactor 多线程模型 主从Reactor 多线程模型示例 1…