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

非对称加密算法(RSA、ECC、SM2)——密码学基础

对称加密算法(AES、ChaCha20和SM4)Python实现——密码学基础(Python出现No module named “Crypto” 解决方案)

这篇的续篇,因此实践部分少些;


文章目录

  • 一、非对称加密算法基础
  • 二、RSA算法
    • 2.1 RSA原理与数学基础
    • 2.2 RSA密钥长度与安全性
    • 2.3 RSA实现工具与库
    • 2.4 RSA的局限性
  • 三、椭圆曲线密码学(ECC)
    • 3.1 ECC原理与数学基础
    • 3.2 常用椭圆曲线标准
    • 3.3 ECC与RSA比较
    • 3.4 ECC实现工具与库
  • 四、国密算法SM2
    • 4.1 SM2算法概述
    • 4.2 SM2技术特点
    • 4.3 SM2与国际算法对比
    • 4.4 SM2实现与应用
  • 五、非对称加密实践建议
    • 5.1 密钥管理
    • 5.2 安全实现注意事项
    • 5.3 混合加密系统设计
    • 5.4 跨境合规与算法选择
  • 六、未来发展与量子安全
    • 6.1 量子计算威胁
    • 6.2 后量子密码学
    • 6.3 算法过渡策略
    • 6.4 永恒密钥问题与前向保密
  • 七、总结与建议
  • 附录:专业术语表


一、非对称加密算法基础

非对称加密概述

非对称加密是现代密码学的基石,它使用一对密钥(公钥和私钥)进行加密和解密操作。与传统的对称加密不同,非对称加密解决了密钥分发的难题,为互联网安全通信奠定了基础。

非对称加密的基本工作原理是:

  • 使用接收方的公钥加密信息,只有拥有对应私钥的接收方才能解密
  • 使用发送方的私钥签名信息,任何人都可以使用发送方的公钥验证签名的真实性

这种机制为网络通信带来了机密性、完整性和不可否认性等关键安全特性。

常见应用场景

非对称加密在日常数字生活中无处不在:

  • HTTPS安全通信:保护网络浏览安全
  • 数字签名:确保电子文档的真实性和完整性
  • PKI(公钥基础设施):管理和分发数字证书
  • SSH安全连接:保护远程服务器访问
  • 区块链与加密货币:保护数字资产交易
  • 安全电子邮件:加密敏感通信内容

二、RSA算法

2.1 RSA原理与数学基础

RSA算法由Ron Rivest、Adi Shamir和Leonard Adleman三位密码学家于1977年提出,是最早的公钥密码系统之一,至今仍被广泛使用。

RSA的安全性基于大整数分解的计算困难性。其核心数学原理如下:

  1. 选择两个大质数p和q,计算乘积n = p × q
  2. 计算欧拉函数φ(n) = (p-1) × (q-1)
  3. 选择一个与φ(n)互质的整数e作为公钥指数
  4. 计算e的模反元素d,使得e × d ≡ 1 (mod φ(n)),d作为私钥指数
  5. 公钥为(n, e),私钥为(n, d)

加密过程:c = m^e mod n (其中m为明文)
解密过程:m = c^d mod n (其中c为密文)

2.2 RSA密钥长度与安全性

RSA的安全性主要取决于密钥长度,常见的密钥长度包括:

  • 1024位:已被认为不够安全,不应在新系统中使用
  • 2048位:当前推荐的最低标准,适合一般应用
  • 3072位:满足中等安全需求,预计安全至2030年
  • 4096位:提供更高安全性,适合对安全有极高要求的场景

密钥长度增加会降低性能,需要在安全性和效率之间权衡。美国国家标准与技术研究院(NIST)和各国密码管理机构会定期更新密钥长度推荐标准。

2.3 RSA实现工具与库

实现RSA加密时,应尽量使用经过充分测试的开源库,而非自行实现:

  • OpenSSL:跨平台的开源密码学工具包和库

    # 生成RSA私钥
    openssl genrsa -out private.pem 2048
    # 从私钥提取公钥
    openssl rsa -in private.pem -pubout -out public.pem
    # 使用公钥加密文件
    openssl rsautl -encrypt -pubin -inkey public.pem -in plaintext.txt -out encrypted.txt
    # 使用私钥解密文件
    openssl rsautl -decrypt -inkey private.pem -in encrypted.txt -out decrypted.txt
    
  • 编程语言库:

    • Java: java.security和Bouncy Castle
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
    keyGen.initialize(2048);
    KeyPair pair = keyGen.generateKeyPair();
    PublicKey publicKey = pair.getPublic();
    PrivateKey privateKey = pair.getPrivate();
    
    • Python: cryptography和PyCryptodome
    from cryptography.hazmat.primitives.asymmetric import rsa
    private_key = rsa.generate_private_key(public_exponent=65537,key_size=2048
    )
    public_key = private_key.public_key()
    
    • .NET: System.Security.Cryptography
    using (RSA rsa = RSA.Create(2048))
    {string publicKey = Convert.ToBase64String(rsa.ExportRSAPublicKey());string privateKey = Convert.ToBase64String(rsa.ExportRSAPrivateKey());
    }
    

2.4 RSA的局限性

尽管RSA广泛应用,但它也存在一些局限:

  • 性能问题:RSA运算相对耗时,不适合加密大量数据
  • 量子计算威胁:理论上,量子计算机可以使用Shor算法在多项式时间内分解大整数
  • 实现漏洞:不当实现可能导致侧信道攻击

在实际应用中,通常将RSA与对称加密结合使用:用RSA加密对称密钥,再用对称密钥加密实际数据,这种混合加密既保证了安全性,又提高了效率。


三、椭圆曲线密码学(ECC)

3.1 ECC原理与数学基础

椭圆曲线密码学基于椭圆曲线上的离散对数问题,其数学复杂度比整数分解更高,因此可以用更短的密钥提供同等安全级别。

ECC的基本椭圆曲线方程形式为:y² = x³ + ax + b (mod p)

其中关键的数学原理包括:

  1. 定义在有限域上的椭圆曲线点集
  2. 曲线上点的加法运算
  3. 点的标量乘法(即连续加法):Q = kP,已知P和k容易计算Q,但已知P和Q难以求解k

这一数学难题称为椭圆曲线离散对数问题(ECDLP),是ECC安全性的基础。

3.2 常用椭圆曲线标准

实际应用中,使用标准化的椭圆曲线参数集可确保安全性和互操作性:

  • NIST曲线:美国标准,如P-256、P-384和P-521
  • Brainpool曲线:欧洲标准,提供替代参数集
  • Curve25519和Curve448:更现代的曲线,设计目标是抵抗侧信道攻击
  • secp256k1:比特币和以太坊等加密货币使用的曲线

选择曲线时应考虑安全性、性能和各国监管要求。

3.3 ECC与RSA比较

ECC相比RSA的主要优势:

安全级别RSA密钥长度ECC密钥长度ECC优势比例
80位1024位160-223位约5倍
112位2048位224-255位约8倍
128位3072位256-383位约12倍
192位7680位384-511位约20倍
256位15360位512位以上约30倍

ECC的其他优势:

  • 更低的计算复杂度,特别适合资源受限设备
  • 更小的密文和签名大小,节省带宽和存储空间
  • 更快的密钥生成速度

缺点:

  • 实现复杂度高于RSA
  • 专利问题(部分曲线和实现)
  • 相对较新,长期安全性评估少于RSA

3.4 ECC实现工具与库

  • OpenSSL支持多种椭圆曲线:

    # 查看支持的椭圆曲线
    openssl ecparam -list_curves# 生成ECC私钥(使用P-256曲线)
    openssl ecparam -name prime256v1 -genkey -noout -out private.pem# 从私钥提取公钥
    openssl ec -in private.pem -pubout -out public.pem
    
  • 编程语言库:

    • Java:
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
    ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256r1");
    keyGen.initialize(ecSpec);
    KeyPair pair = keyGen.generateKeyPair();
    
    • Python:
    from cryptography.hazmat.primitives.asymmetric import ec
    private_key = ec.generate_private_key(ec.SECP256R1()
    )
    public_key = private_key.public_key()
    
    • JavaScript (使用Web Crypto API):
    async function generateECDHKeys() {const keyPair = await window.crypto.subtle.generateKey({name: "ECDH",namedCurve: "P-256"},true,["deriveKey", "deriveBits"]);return keyPair;
    }
    

四、国密算法SM2

4.1 SM2算法概述

SM2是中国商用密码算法标准之一,由国家密码管理局于2010年发布,是基于椭圆曲线密码学的非对称加密算法。SM2是"国密"体系中的重要组成部分,与SM3(哈希算法)和SM4(对称加密算法)共同构建中国自主知识产权的密码体系。

SM2包含三部分功能:

  • 数字签名算法
  • 密钥交换协议
  • 公钥加密算法

4.2 SM2技术特点

SM2具有以下技术特点:

  • 基于椭圆曲线数学原理,曲线方程为:y² = x³ + ax + b (mod p)
  • 使用256位密钥长度,安全性等同于RSA 3072位
  • 采用中国自定义的椭圆曲线参数

4.3 SM2与国际算法对比

SM2与国际常用的ECC算法相比:

  • 安全性:理论上与同等密钥长度的国际ECC算法具有相当安全性
  • 性能:在中国设计的密码硬件上可能有更优的性能表现
  • 算法差异:采用不同的椭圆曲线参数和预处理方法
  • 应用范围:在中国政府、金融机构和关键基础设施中强制使用

对于跨国企业,需要同时支持国际标准和国密标准。

4.4 SM2实现与应用

SM2在中国有广泛应用:

  • 电子政务系统
  • 金融支付系统
  • 数字证书
  • 安全通信
  • 网络身份认证

实现SM2的工具与库:

  • GmSSL:支持国密算法的OpenSSL分支

    # 生成SM2密钥对
    gmssl sm2keygen -out sm2.key# 从私钥提取公钥
    gmssl sm2pubout -in sm2.key -out sm2.pub# 使用公钥加密
    gmssl sm2encrypt -in plaintext.txt -inkey sm2.pub -out ciphertext.bin# 使用私钥解密
    gmssl sm2decrypt -in ciphertext.bin -inkey sm2.key -out decrypted.txt
    
  • 编程语言支持:

    • Java: Bouncy Castle提供SM2支持
    ECGenParameterSpec sm2Spec = new ECGenParameterSpec("sm2p256v1");
    KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC");
    kpg.initialize(sm2Spec);
    KeyPair keyPair = kpg.generateKeyPair();
    
    • Go: tjfoc/gmsm库
    import "github.com/tjfoc/gmsm/sm2"privateKey, _ := sm2.GenerateKey()
    publicKey := &privateKey.PublicKey
    

五、非对称加密实践建议

5.1 密钥管理

良好的密钥管理是非对称加密安全的基础:

  • 私钥保护:

    • 使用硬件安全模块(HSM)或可信平台模块(TPM)存储私钥
    • 加密存储私钥,使用强密码和密钥派生函数(KDF)
    • 实施最小权限原则,限制私钥访问
    • 定期轮换密钥,减少长期暴露风险
  • 公钥分发:

    • 使用可信的公钥基础设施(PKI)
    • 验证公钥指纹或哈希值
    • 使用带外渠道确认公钥
  • 密钥备份与灾难恢复:

    • 安全备份私钥,考虑分片存储
    • 制定密钥恢复流程,防止单点故障
    • 记录密钥元数据,如算法、长度、用途和过期日期

5.2 安全实现注意事项

非对称加密实现中的常见安全隐患:

  • 随机数生成:使用密码学安全的随机数生成器(CSPRNG)
  • 填充机制:采用OAEP等现代填充方案,避免传统PKCS#1 v1.5填充
  • 侧信道防护:实施恒定时间算法和内存清理
  • 算法参数验证:验证输入参数,防止小子群攻击等
  • 错误处理:使用一致的错误消息,避免泄露敏感信息

5.3 混合加密系统设计

实际应用中,通常将非对称加密与对称加密结合:

  1. 随机生成会话密钥(对称密钥)
  2. 使用非对称公钥加密会话密钥
  3. 使用会话密钥加密实际数据
  4. 传输加密的会话密钥和数据

这种方法结合了非对称加密的密钥管理优势和对称加密的性能优势。

TLS协议是混合加密的典型应用:

  • 使用非对称加密进行身份认证和密钥交换
  • 协商会话密钥后使用对称加密保护通信内容

5.4 跨境合规与算法选择

全球化业务面临的密码算法合规问题:

  • 中国:关键信息基础设施需使用国密算法(SM2/SM3/SM4)
  • 美国:政府系统通常使用NIST批准的算法
  • 欧盟:遵循ETSI和ENISA标准
  • 俄罗斯:某些场景要求使用GOST算法

解决方案:

  • 开发多算法支持架构
  • 实施区域性密码政策
  • 保持算法更新机制,应对新标准和安全威胁

六、未来发展与量子安全

6.1 量子计算威胁

量子计算对当前非对称加密构成严重威胁:

  • Shor算法:理论上可以在多项式时间内解决整数分解和离散对数问题
  • 影响:RSA、DSA、ECC等传统非对称算法将不再安全
  • 时间窗口:专家估计实用量子计算机可能在10-20年内出现

6.2 后量子密码学

为应对量子威胁,研究者开发了多种后量子密码算法:

  • 格密码:基于格中最短向量问题(SVP)和最近向量问题(CVP)的困难性
  • 基于哈希的签名:利用哈希函数的单向性构建签名方案
  • 多变量多项式:基于求解多变量非线性方程组的困难性
  • 基于编码的密码:利用解码随机线性码的困难性
  • 同态密码:支持对加密数据直接进行计算

NIST后量子密码标准化进程已选择多个候选算法,包括:

  • CRYSTALS-Kyber:格密码密钥封装机制(KEM)
  • CRYSTALS-Dilithium、FALCON和SPHINCS+:数字签名算法

6.3 算法过渡策略

组织应制定量子安全过渡计划:

  1. 密码敏捷性:设计支持快速算法更换的系统架构
  2. 混合方案:同时使用传统算法和后量子算法
  3. 风险评估:识别量子威胁下的关键资产和长期敏感数据
  4. 保持监控:跟踪量子计算进展和密码标准更新
  5. 早期采用:在非关键系统中试点后量子算法

6.4 永恒密钥问题与前向保密

应对"保存现在、破解未来"的威胁:

  • 实施前向保密机制:使用临时密钥,即使长期密钥泄露也不影响历史通信安全
  • 密钥限时:限制密钥使用时间,减少长期暴露风险
  • 数据生命周期管理:确定数据保护期限,超期数据安全销毁

七、总结与建议

基于不同场景的算法推荐:

  • 通用企业应用:RSA-2048或ECC P-256
  • 对性能敏感场景:优先选择ECC
  • 移动和物联网设备:ECC或轻量级后量子算法
  • 中国境内系统:遵循国密标准,使用SM2
  • 长期数据保护:考虑混合使用传统算法和后量子算法

定期评估密码系统安全性:

  • 密码算法及参数审查
  • 密钥管理流程评估
  • 实现安全性测试(包括侧信道分析)
  • 密码边界识别和保护
  • 加密文档与策略审查

密码学的真正目标不是创造隔离,而是在保障安全的前提下构建信任和连接。


附录:专业术语表

A

  • 非对称加密(Asymmetric Encryption):使用公钥和私钥对的加密系统
  • 认证(Authentication):验证身份或信息来源的过程

B

  • 区块链(Blockchain):使用密码学链接的分布式账本技术
  • 暴力攻击(Brute Force Attack):通过尝试所有可能的密钥值来破解加密

C

  • 密文(Ciphertext):经过加密的数据
  • 密码学(Cryptography):研究信息安全的科学
  • 证书(Certificate):包含公钥和身份信息的数字文档

D

  • 解密(Decryption):将密文转换回明文的过程
  • 数字签名(Digital Signature):验证消息来源和完整性的密码机制

E

  • 椭圆曲线密码学(Elliptic Curve Cryptography, ECC):基于椭圆曲线数学的加密方法
  • 加密(Encryption):将明文转换为密文的过程

F

  • 前向保密(Forward Secrecy):确保即使长期密钥泄露也不影响过去通信安全的属性

H

  • 哈希函数(Hash Function):将任意大小数据映射为固定大小值的单向函数
  • 硬件安全模块(Hardware Security Module, HSM):专用于密码操作的安全硬件设备

K

  • 密钥(Key):控制加密和解密操作的参数
  • 密钥长度(Key Length):密钥的位数,影响安全强度
  • 密钥管理(Key Management):生成、存储、分发和销毁密钥的流程

M

  • 明文(Plaintext):未加密的原始数据

N

  • 随机数(Nonce):只使用一次的随机值,用于防止重放攻击

O

  • OpenSSL:广泛使用的开源密码学工具包和库

P

  • 公钥(Public Key):可公开分享的密钥,用于加密或验证签名
  • 私钥(Private Key):需保密的密钥,用于解密或创建签名
  • 公钥基础设施(Public Key Infrastructure, PKI):管理数字证书的系统和流程

Q

  • 量子计算(Quantum Computing):利用量子力学原理进行计算的技术
  • 量子密码学(Quantum Cryptography):利用量子力学原理设计的密码系统

R

  • RSA:基于大整数分解难题的非对称加密算法
  • 随机数生成器(Random Number Generator):生成随机值的算法或设备

S

  • 签名(Signature):证明消息来源和完整性的加密结构
  • 侧信道攻击(Side-channel Attack):通过分析实现的物理特性破解密码系统
  • SM2:中国国家密码管理局发布的椭圆曲线公钥密码算法

T

  • 传输层安全(Transport Layer Security, TLS):保护网络通信的加密协议

Z

  • 零知识证明(Zero-knowledge Proof):证明者可以向验证者证明一个陈述是真实的,而不泄露除了该陈述为真之外的任何信息

相关文章:

非对称加密算法(RSA、ECC、SM2)——密码学基础

对称加密算法(AES、ChaCha20和SM4)Python实现——密码学基础(Python出现No module named “Crypto” 解决方案) 这篇的续篇,因此实践部分少些; 文章目录 一、非对称加密算法基础二、RSA算法2.1 RSA原理与数学基础2.2 RSA密钥长度…...

【安装指南】Chat2DB-集成了AI功能的数据库管理工具

一、Chat2DB 的介绍 Chat2DB 是一款开源的、AI 驱动的数据库工具和 SQL 客户端,提供现代化的图形界面,支持 MySQL、Oracle、PostgreSQL、DB2、SQL Server、SQLite、H2、ClickHouse、BigQuery 等多种数据库。它旨在简化数据库管理、SQL 查询编写、报表生…...

【C++】认识map和set

目录 前言: 一:认识map和set 二:map和set的使用 1.set的使用 2.map的使用 三:map的insert方法返回值 四:map的[ ]的使用 五:multiset和multimap 六:map和set的底层数据结构 七&#x…...

LWIP带freeRTOS系统移植笔记

以正点原子学习视频为基础的文章 LWIP带freeRTOS系统移植 准备资料/工程 1、lwIP例程1 lwIP裸机移植 工程 , 作为基础工程 改名为LWIP_freeRTOS_yizhi工程 2、lwIP例程6 lwIP_FreeRTOS移植 工程 3、freeRTO源码 打开https://www.freertos.org/网址下载…...

【MinerU技术原理深度解析】大模型时代的文档解析革命

目录 一、MinerU概述 获取MinerU 二、核心功能与技术亮点 1. 多模态解析能力 2. 高效预处理能力 3. 多场景适配性 4. API服务 三、技术架构解析 3.1 概述 1. 模块化处理流程 2. 关键模型与技术 3.2 核心组件技术原理 3.2.1 布局检测(Layout Detection) 3.2.2 公式…...

rabbitMQ如何确保消息不会丢失

rabbitmq消息丢失的三种情况 生产者将消息发送到RabbitMQ的过程中时,消息丢失。消息发送到RabbitMQ,还未被持久化就丢失了数据。消费者接收到消息,还未处理,比如服务宕机导致消息丢失。 解决方案 生产者发送过程中,…...

数字智慧方案5970丨智慧农业大数据服务建设方案(69页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 资料解读:智慧农业大数据服务建设方案 在当今数字化时代,农业领域也正经历着深刻变革,智慧农业大数据服务建设方案应运而生。这一方案对推动农业现代化进程意义非凡,下面让我们深入剖析其核心…...

英一真题阅读单词笔记 22-23年

2022年真题阅读单词 2022 年 Text 1 第一段 1 complain [kəmˈpleɪn] v. 抱怨,投诉;诉说(病痛) 2 plastic [ˈplstɪk] n. 塑料;信用卡 a. 造型的,塑造的;塑料制的 3 durable [ˈd…...

Java大师成长计划之第10天:锁与原子操作

📢 友情提示: 本文由银河易创AI(https://ai.eaigx.com)平台gpt-4o-mini模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。 在多线程编程中,锁与原子…...

2025大模型安全研究十大框架合集(10份)

2025大模型安全研究十大框架合集的详细介绍: Anthropic AI信任研究框架 Anthropic于2024年10月更新的《安全责任扩展政策》(RSP),提出了一个灵活的动态AI风险治理框架。该框架规定当AI模型达到特定能力时,将自动升级安全措施,如…...

溯因推理思维——AI与思维模型【92】

一、定义 溯因推理思维模型是一种从结果出发,通过分析、推测和验证,寻找导致该结果的可能原因的思维方式。它试图在已知的现象或结果基础上,逆向追溯可能的原因,构建合理的解释框架,以理解事物的本质和内在机制。 二、由来 溯因推理的思想可以追溯到古希腊哲学家亚里士…...

系统架构设计师:设计模式——结构型设计模式

一、结构型设计模式 结构型设计模式涉及如何组合类和对象以获得更大的结构。结构型类模式采用继承机制来组合接口或实现。一个简单的例子是采用多重继承方法将两个以上的类组合成一个类,结果这个类包含了所有父类的性质。 这一模式尤其有助于多个独立开发的类库协…...

接口测试实战指南:从入门到精通的质量保障之道

为什么接口测试如此重要? 在当今快速迭代的软件开发环境中,接口测试已成为质量保障体系中不可或缺的一环。据统计,有效的接口测试可以发现约70%的系统缺陷,同时能将测试效率提升3-5倍。本指南将从实战角度出发,系统性…...

对第三方软件开展安全测评,如何保障其安全使用?

对第三方软件开展安全测评,能够精准找出软件存在的各类安全隐患,进而为软件的安全使用给予保障。此次会从漏洞发现、风险评估、测试环境等多个方面进行具体说明。 漏洞发现情况 在测评过程中,我们借助专业技术与工具,对第三方软…...

计算方法实验四 解线性方程组的间接方法

【实验性质】 综合性实验。 【实验目的】 掌握迭代法求解线性方程组。 【实验内容】 应用雅可比迭代法和Gauss-Sediel迭代法求解下方程组: 【理论基础】 线性方程组的数值解法分直接算法和迭代算法。迭代法将方程组的求解转化为构造一个向量序列&…...

Qt 中基于 QTableView + QSqlTableModel 的分页搜索与数据管理实现

Qt 中基于 QTableView QSqlTableModel 的分页搜索与数据管理实现 一、组件说明 QTableView:一个基于模型的表格视图控件,支持排序、选择、委托自定义。QSqlTableModel:与数据库表直接绑定的模型类,可用于展示和编辑数据库表数据…...

云计算-容器云-服务网格Bookinfo

服务网格:创建 Ingress Gateway 将 Bookinfo 应用部署到 default 命名空间下,请为 Bookinfo 应用创建一个网 关,使外部可以访问 Bookinfo 应用。 上传ServiceMesh.tar.gz包 [rootk8s-master-node1 ~]# tar -zxvf ServiceMesh.tar.gz [rootk…...

PostgreSQL自定义函数

自定义函数 基本语法 //建一个名字为function_name的自定义函数create or replace function function_name() returns data_type as //returns 返回一个data_type数据类型的结果;data_type 是返回的字段的类型;$$ //固定写法......//方法体$$ LANGUAGE …...

学习记录:DAY22

我的重生开发之旅:优化DI容器,git提交规范,AOP处理器,锁与并发安全 前言 我重生了,重生到了五一开始的一天。上一世,我天天摆烂,最后惨遭实习生优化。这一世,我要好好内卷… 今天的…...

HarmonyOS NEXT第一课——HarmonyOS介绍

一、什么是HarmonyOS 万物互联时代应用开发的机遇、挑战和趋势 随着万物互联时代的开启,应用的设备底座将从几十亿手机扩展到数百亿IoT设备。全新的全场景设备体验,正深入改变消费者的使用习惯。 同时应用开发者也面临设备底座从手机单设备到全场景多设…...

数据库系统概论|第五章:数据库完整性—课程笔记1

前言 在前文介绍完数据库标准语言SQL之后,大家已经基本上掌握了关于数据库编程的基本操作,那我们今天将顺承介绍关于数据库完整性的介绍,数据库的完整性是指数据的正确性和相容性。数据的完整性是为了防止数据库中存在不符合语义的数据&…...

开源无人机地面站QGroundControl安卓界面美化与逻辑优化实战

QGroundControl作为开源无人机地面站软件,其安卓客户端界面美化与逻辑优化是提升用户体验的重要工程。 通过Qt框架的界面重构和代码逻辑优化,可以实现视觉升级与性能提升的双重目标。本文将系统讲解QGC安卓客户端的二次开发全流程,包括开发环境搭建、界面视觉升级、多分辨率…...

工作记录 2017-12-12 + 在IIS下发布wordpress

工作记录 2017-12-12 序号 工作 相关人员 1 修改邮件上的问题。 更新RD服务器。 在IIS下发布wordpress。 郝 服务器更新 RD服务器更新了,更新的文件放在190的D:\Temp\CHTeam\fnehr_update_20171212\下了。 数据库更新: 数据库没有更新 更新的文件&#xf…...

BBR 之 ProbeRTT 新改

早在 1981 年,Jaffe 在 Flow Control Power is Nondecentralizable 中就给出过论证,测量 maxbw 必然引入队列,而获得 minrtt 时带宽必然欠载,这确定了后面 30 年的拥塞控制算法基调,但 BBR 在 35 年后非常聪明地在两者…...

[创业之路-354]:农业文明到智能纪元:四次工业革命下的人类迁徙与价值重构

农业文明到智能纪元:四次工业革命下的人类迁徙与价值重构 从游牧到定居,从蒸汽轰鸣到算法洪流,人类文明的每一次跨越都伴随着生产关系的剧烈震荡。四次工业革命的浪潮不仅重塑了物质世界的生产方式,更将人类推向了身份认同与存在…...

敏感词 v0.25.0 新特性之 wordCheck 策略支持用户自定义

开源项目 敏感词核心 https://github.com/houbb/sensitive-word 敏感词控台 https://github.com/houbb/sensitive-word-admin 版本特性 大家好,我是老马。 敏感词一开始了内置了多种检验策略,但是很多用户在使用的过程中希望可以自定义策略。 所以 v0…...

从0到上线,CodeBuddy 如何帮我快速构建旅游 App?

引言 腾讯云AI代码助手之前就改成了CodeBuddy我相信这也是在为后期做准备。那么这篇文章会对CodeBuddy进行比较详细的介绍,并一起来上手实战,感受一下实际开发中这款插件能带给我们多少的便利。本篇文章是一边写一边进行测试,并不是测试完之…...

微信小程序 自定义组件 标签管理

环境 小程序环境: 微信开发者工具:RC 1.06.2503281 win32-x64 基础运行库:3.8.1 概述 基础功能 标签增删改查:支持添加/删除单个标签、批量删除、重置默认标签 数据展示:通过对话框展示结构化数据并支持复制 动…...

从 Eclipse Papyrus / XText 转向.NET —— SCADE MBD技术的演化

从KPN[1]的萌芽开始,到SCADE的推出[2],再到Scade 6的技术更迭[3],SCADE 基于模型的开发技术已经历许多。现在,Scade One 已开启全新的探索 —— 从 Eclipse Papyrus / XText 转向.NET 8跨平台应用。 [1]: KPN, Kahn进程网络 (197…...

【学习笔记】机器学习(Machine Learning) | 第五章(2)| 分类与逻辑回归

机器学习(Machine Learning) 简要声明 基于吴恩达教授(Andrew Ng)课程视频 BiliBili课程资源 文章目录 机器学习(Machine Learning)简要声明 二、决策边界决策边界的数学表达线性决策边界示例非线性决策边界非线性决策边界的示例…...

python 常用web开发框架及使用示例

Python常用Web开发框架及使用示例 Python拥有丰富的Web开发框架生态系统,以下是主流框架及其使用示例: 一、Flask - 轻量级框架 安装 pip install flask 基础示例 from flask import Flask, request, jsonifyapp Flask(__name__)app.route(/) def…...

[ Qt ] | 第一个Qt程序

1. 创建Qt项目 我们打开Qt Create工具,左上角“文件”,新建文件。 --- --- --- --- 这个是我们的APP“走出国门”的时候,要关注的,这里就不说了。 后面这两个直接默认,下一步就行~~。 2. 项目默认内容 下面就是Qt C…...

react + antd 实现后台管理系统

文章目录 完整路由搭建Layout 和 Aside组件引入 AntdAside组件实现 项目效果图 项目完整代码地址 https://gitee.com/lyh1999/react-back-management 项目完整代码地址 react依赖安装 最好采用yarn 安装 react-router 安装依赖 配置路由 history模式 / // src/router/…...

vue3+ts项目 配置vue-router

安装vue-router pnpm install vue-router配置 1.src/router/index.ts文件下的内容 import type { App } from vue import type { RouteRecordRaw } from vue-router import { createRouter, createWebHistory } from vue-router import remainingRouter from ./modules/remai…...

MySQL基本查询(二)

文章目录 UpdateDelete插入查询结果(select insert)聚合函数分组聚合统计 Update 1. 语法: set后面加列属性或者表达式 UPDATE table_name SET column expr [, column expr …][WHERE …] [ORDER BY …] [LIMIT …] 案例 将孙悟空同学的…...

MySQL:联合查询

目录 一、笛卡尔积 ​二、内连接 三、外连接 (1)左外连接 (2)右外连接 (3)全外连接 四、自连接 五、子查询 (1)单行子查询 (2)多行子查询 &…...

[算法学习]——通过RMQ与dfs序实现O(1)求LCA(含封装板子)

每周五篇博客:(3/5) 碎碎念 其实不是我想多水一篇博客,本来这篇是欧拉序的博客,结果dfs序也是可以O1求lca的,而且常数更优,结果就变成这样了。。。 前置知识 [算法学习]——dfs序 思想 分…...

复刻低成本机械臂 SO-ARM100 舵机配置篇(WSL)

视频讲解: 复刻低成本机械臂 SO-ARM100 舵机配置篇(WSL) 飞特舵机 组装之前需要配置舵机的ID,如下的网址为舵机的资料,实际上用不到,但可以mark在这里 Software-深圳飞特模型有限公司 User Guide里面可以…...

聊一聊接口测试更侧重于哪方面的验证

目录 一、功能性验证 输入与输出正确性 参数校验 业务逻辑覆盖 二、数据一致性验证 数据格式规范 数据完整性 数据类型与范围 三、异常场景验证 容错能力测试 边界条件覆盖 错误码与信息清晰度 四、安全与权限验证 身份认证 数据安全 防攻击能力 五、性能与可…...

【网络安全实验】SSL协议的应用

目录 一、SSL协议介绍 2.功能与特点 1)数据加密 2)身份验证 3)数据完整性校验 3.SSL的工作流程(握手过程) 1)客户端问候(ClientHello) 2)服务器响应(…...

测试——用例篇

目录 1. 测试用例 1.1 概念 2. 设计测试用例的万能公式 2.1 常规思考逆向思维发散性思维 2.2 万能公式 3. 设计测试用例例的方法 3.1 基于需求的设计方法 ​编辑 3.2 具体的设计方法 3.2.1 等价类 3.2.2 边界值 3.2.3 正交法 3.2.4 判定表法 3.2.5 场景法 3.2.6…...

计算机视觉技术的发展历程

计算机视觉技术的发展历程可以分为以下几个阶段: 早期探索阶段(1960s-1980s) 1960年代:计算机视觉的概念开始形成,研究者尝试让计算机识别和理解图像,主要集中在基础的图像处理,如边缘检测和特…...

docker 官方:在 alpine 上安装 python 的方法

在 alpine 上安装 python 的方法在 alpine 上安装 python 的方法: # alpine 官方 apk add python3 # docker 官方 docker pull python:3.11-alpine # 第三方 docker run --rm frolvlad/alpine-python3 python3 -c print("Hello World") # 编译安装 略 要点…...

mescroll.js 是在 H5端 运行的下拉刷新和上拉加载插件

1. mescroll的uni版本, 是专门用在uni-app的下拉刷新和上拉加载的组件, 支持一套代码编译到iOS、Android、H5、小程序等多个平台 2. mescroll的uni版本, 继承了mescroll.js的实用功能: 自动处理分页, 自动控制无数据, 空布局提示, 回到顶部按钮 .. 3. mescroll的uni版本, 丰富的…...

openEuler 22.03 安装 Mysql 5.7,RPM 在线安装

目录 一、检查系统是否安装其他版本Mariadb数据库二、安装 MySQL三、配置 MySQL四、修改默认存储路径五、开放防火墙端口六、数据备份七、生产环境优化八、常用命令 一、检查系统是否安装其他版本Mariadb数据库 # 查看已安装的 Mariadb 数据库版本 [rootopeneuler ~]# rpm -qa…...

云原生后端架构的挑战与应对策略

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 随着云计算、容器化以及微服务等技术的快速发展,云原生架构已经成为现代软件开发和运维的主流趋势。企业通过构建云原生后端系统,能够实现灵活的资源管理、快速的应用迭代和高效的系统扩展。然而,尽管云原…...

第十六届蓝桥杯 2025 C/C++组 客流量上限

目录 题目: 题目描述: 题目链接: 思路: 打表找规律: 核心思路: 思路详解: 得到答案的方式: 按计算器: 暴力求解代码: 快速幂代码: 位运…...

LeetCode算法题 (移除链表元素)Day15!!!C/C++

https://leetcode.cn/problems/remove-linked-list-elements/description/ 一、题目分析 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 今天的题目非常好理解,也就是要删除…...

stm32 HAI库 SPI(一)原理

基本特点 通信方式:同步、串行(串行、并行、并发,别再傻傻分不清了!_串行和并行的区别-CSDN博客)、全双工 (也可以选择半双工)速率:50MHZ以下数据格式:8位/16位传输顺序…...

仿腾讯会议——主界面设计创建房间加入房间客户端实现

1、实现腾讯会议主界面 2、添加Qt类WeChatDialog 3、定义创建会议和加入会议的函数 4、实现显示名字、头像的函数 调用函数 5、在中间者类中绑定函数 6、实现创建房间的槽函数 7、实现加入房间的槽函数 8、设置界面标题 9、服务器定义创建和进入房间函数 10、服务器实现创建房间…...