对比表格:数字签名方案、密钥交换协议、密码学协议、后量子密码学——密码学基础
文章目录
- 一、数字签名方案
- 1.1 ECDSA:基于椭圆曲线的数字签名算法
- 1.2 EdDSA:Edwards曲线数字签名算法
- 1.3 RSA-PSS:带有概率签名方案的RSA
- 1.4 数字签名方案对比
- 二、密钥交换协议
- 2.1 Diffie-Hellman密钥交换
- 2.2 ECDH:椭圆曲线Diffie-Hellman密钥交换
- 2.3 量子抗性密钥交换协议:CRYSTALS-Kyber
- 2.4 密钥交换协议对比
- 三、密码学协议
- 3.1 TLS 1.3:传输层安全协议
- 3.2 Signal协议:端到端加密通信
- 3.3 IKEv2:互联网密钥交换协议
- 3.4 密码学协议对比
- 四、后量子密码学
- 4.1 基于格的密码学
- 4.2 基于哈希的密码学:SPHINCS+
- 4.3 基于多变量多项式的密码学:Rainbow
- 4.4 基于超椭圆曲线同源系统的密码学:SIKE
- 4.5 后量子密码学方案对比
这一部分作为了解吧,前几章有代码,可以深入学习一下。
同系列:
- 对称加密算法(AES、ChaCha20和SM4)Python实现——密码学基础(Python出现No module named “Crypto” 解决方案)
- 非对称加密算法(RSA、ECC、SM2)——密码学基础
- 哈希函数详解(SHA-2系列、SHA-3系列、SM3国密)案例:构建简单的区块链——密码学基础
一、数字签名方案
数字签名是现代信息安全体系中的基石,它为数字通信提供了身份验证、数据完整性和不可否认性。想象一下,在物理世界中,你用独特的笔迹签署文件;在数字世界中,数字签名扮演着类似角色,但提供了更强的安全保障。
1.1 ECDSA:基于椭圆曲线的数字签名算法
椭圆曲线数字签名算法(ECDSA)是一种使用椭圆曲线密码学的数字签名方案。与传统的RSA签名相比,ECDSA能够提供相同的安全强度,但使用更短的密钥长度。
工作原理:
- 密钥生成:选择一条椭圆曲线和基点G,生成私钥d(随机数)和公钥Q=d×G
- 签名生成:计算消息哈希,使用私钥和随机数k生成签名对(r,s)
- 签名验证:使用发送者的公钥验证签名的有效性
应用场景:
- 比特币和以太坊等区块链技术
- TLS/SSL安全通信
- 数字证书签名
优势:
- 高效率:相比RSA,计算速度更快
- 紧凑性:较短的密钥长度和签名大小
- 强安全性:256位ECDSA提供与3072位RSA相当的安全强度
工具与实现:
- OpenSSL库(支持各种编程语言)
- 专业密码库如Bouncy Castle (Java)
- 区块链开发工具如web3.js(以太坊)
1.2 EdDSA:Edwards曲线数字签名算法
EdDSA (Edwards-curve Digital Signature Algorithm) 是一种基于扭曲Edwards曲线的数字签名算法,最著名的实现是Ed25519。
工作原理:
- 密钥生成:从私钥种子导出扩展私钥,计算公钥
- 签名生成:使用确定性方法(无需随机数生成器),降低实现错误风险
- 签名验证:验证签名与消息和公钥的关系
主要特点:
- 确定性签名:相同消息和密钥总是产生相同签名
- 批量验证:可高效验证多个签名
- 没有特殊情况:简化实现,减少安全漏洞
应用场景:
- Signal等安全通信软件
- SSH密钥认证
- DNSsec域名系统安全扩展
工具与库:
- libsodium(跨平台密码学库)
- NaCl(Networking and Cryptography library)
- Ed25519实现库(多种编程语言)
1.3 RSA-PSS:带有概率签名方案的RSA
RSA-PSS (Probabilistic Signature Scheme) 是RSA签名的一种现代变体,增加了随机性元素,提高了安全性。
技术细节:
- 使用掩码生成函数(MGF)添加随机性
- 对消息进行盐化处理,使得即使相同消息的多次签名也会产生不同结果
- 包含严格的数学证明,满足选择性伪造攻击下的安全性
应用场景:
- 企业级PKI基础设施
- 数字证书生成
- 文档签名系统
优势与劣势:
- 优势:更强的安全性证明,抵抗选择性伪造攻击
- 劣势:计算开销较大,对嵌入式设备有挑战
实现工具:
- OpenSSL (RSA-PSS模式)
- Microsoft CryptoAPI
- PKCS#11兼容设备和库
1.4 数字签名方案对比
特性 | ECDSA | EdDSA | RSA-PSS |
---|---|---|---|
安全级别(等效位长) | 256位 | 255位 | 3072位 |
签名大小 | 64字节 | 64字节 | 384字节 |
签名速度 | 快 | 非常快 | 慢 |
验证速度 | 中等 | 快 | 快 |
随机数需求 | 高质量随机数(关键) | 不需要(确定性) | 需要盐值 |
数学基础 | 椭圆曲线离散对数 | 扭曲Edwards曲线 | 大数分解 |
量子抵抗性 | 弱 | 弱 | 弱 |
实现复杂度 | 中等 | 低(简单) | 高 |
标准化状态 | FIPS 186-4, SEC1 | RFC 8032 | PKCS#1 v2.2, RFC 8017 |
二、密钥交换协议
密钥交换是现代加密通信的基础环节,它解决了一个根本问题:如何在不安全的通道上安全地建立共享密钥。这些协议允许通信双方在没有预共享秘密的情况下,协商出一个双方都知道但窃听者无法获取的共同密钥。
2.1 Diffie-Hellman密钥交换
Diffie-Hellman密钥交换(DH)是第一个公开的密钥交换协议,由Whitfield Diffie和Martin Hellman于1976年提出,是现代密码学的里程碑。
工作原理:
- 双方共享两个公共参数:一个大素数p和一个基数g
- Alice生成私钥a,计算公钥A = g^a mod p,并发送A给Bob
- Bob生成私钥b,计算公钥B = g^b mod p,并发送B给Alice
- Alice计算共享密钥 K = B^a mod p
- Bob计算共享密钥 K = A^b mod p
- 两者得到相同的密钥K = g^(ab) mod p
安全基础:
基于离散对数问题的困难性。即使攻击者知道p、g、A和B,计算私钥a或b在计算上仍然不可行。
应用场景:
- IPsec VPN
- 早期TLS版本
- SSH密钥协商
局限性:
- 易受中间人攻击,需要额外认证机制
- 计算强度较大,对有限资源设备有挑战
- 对量子计算攻击无防护
实现工具:
- OpenSSL的DH函数
- Java JCE (Java Cryptography Extension)
- wolfSSL(嵌入式系统)
2.2 ECDH:椭圆曲线Diffie-Hellman密钥交换
ECDH是Diffie-Hellman密钥交换的椭圆曲线变体,提供了相同的功能,但有更高的效率和安全性。
技术细节:
- 双方共享椭圆曲线参数和基点G
- Alice生成私钥a,计算公钥A = aG(椭圆曲线点乘)
- Bob生成私钥b,计算公钥B = bG
- Alice计算共享点 S = aB
- Bob计算共享点 S = bA
- 两者得到相同的点S = abG,通常使用S的x坐标作为共享密钥
优势:
- 更小的密钥尺寸(256位ECDH≈3072位DH)
- 更快的计算速度
- 降低带宽和存储需求
应用场景:
- TLS 1.2/1.3
- 移动应用加密通信
- 物联网设备安全通信
常用曲线:
- P-256(NIST推荐)
- Curve25519(更高效,广泛使用于现代系统)
- Brainpool曲线(欧洲标准)
工具与库:
- BoringSSL/OpenSSL的EC函数
- libsodium(X25519实现)
- Bouncy Castle加密库
2.3 量子抗性密钥交换协议:CRYSTALS-Kyber
随着量子计算的发展,传统的密钥交换协议面临风险。CRYSTALS-Kyber是NIST后量子密码标准化进程中的获胜者,提供了对抗量子计算攻击的密钥封装机制(KEM)。
工作原理:
- 基于格密码学中的模块学习带错误问题(MLWE)
- 使用多项式运算而非大数或椭圆曲线运算
- 包含独特的噪声采样和错误校正机制
技术特点:
- 提供IND-CCA2安全性(适应性选择密文攻击下的安全)
- 支持密钥封装机制(KEM)而非直接的密钥交换
- 平衡了安全性、性能和密钥/密文大小
优势与挑战:
- 优势:抵抗量子计算攻击,高效实现
- 挑战:较大的密钥和密文尺寸,新技术的部署复杂性
标准化状态:
- 2022年被NIST选为后量子密钥封装标准
- 正在整合到TLS、SSH等协议中
实现工具:
- libpqcrypto(后量子密码库)
- Open Quantum Safe项目
- BoringSSL实验分支
2.4 密钥交换协议对比
特性 | Diffie-Hellman | ECDH (Curve25519) | CRYSTALS-Kyber |
---|---|---|---|
公钥大小 | 256-512字节 | 32字节 | 800-1568字节 |
私钥大小 | 256字节 | 32字节 | 1632-3168字节 |
计算效率 | 低 | 高 | 中等 |
带宽需求 | 高 | 低 | 高 |
数学基础 | 离散对数问题 | 椭圆曲线离散对数 | 模块化学习带错误 |
量子抵抗性 | 无 | 无 | 强 |
成熟度 | 非常成熟 | 成熟 | 新兴 |
典型应用 | 传统VPN | TLS 1.3, Signal | 后量子TLS (实验) |
安全等级 | 128位 (3072位参数) | 128位 | 128-256位 |
三、密码学协议
密码学协议整合了各种密码学原语(如加密、签名、密钥交换)来实现特定的安全目标。这些协议是现代安全通信和数据交换的基础。
3.1 TLS 1.3:传输层安全协议
TLS (Transport Layer Security) 1.3是互联网安全通信的基石,于2018年标准化,替代了旧版本TLS和过时的SSL协议。
核心创新:
- 简化握手:将加密协商减少到1-RTT(往返时间)
- 0-RTT恢复:允许客户端在首个消息中发送加密数据
- 前向安全性:即使长期密钥泄露,过去会话仍受保护
- 删除了不安全的算法:如RC4、DES、3DES、SHA-1等
- 强制加密所有握手消息:增强隐私保护
技术细节:
- 密钥导出:使用HKDF(基于HMAC的密钥派生函数)
- 握手过程:客户端Hello → 服务器Hello+加密扩展+证书+完成 → 客户端完成
- 加密套件:采用AEAD(认证加密与关联数据)如AES-GCM和ChaCha20-Poly1305
- 支持PSK(预共享密钥)和票据机制实现会话恢复
应用场景:
- HTTPS网页加密
- API安全通信
- 企业级VPN解决方案
实现工具:
- OpenSSL 1.1.1+
- GnuTLS 3.6.3+
- wolfSSL 4.0+
- BoringSSL(Google维护)
3.2 Signal协议:端到端加密通信
Signal协议是现代端到端加密即时通信的黄金标准,由Open Whisper Systems开发,提供了一系列强大的安全属性。
关键特性:
- 前向安全性:即使私钥泄露,过去的通信仍然安全
- 后向安全性(又称"未来安全性"):即使当前密钥泄露,未来通信仍然安全
- 抵抗重放、中间人和会话操纵攻击
- 隐藏元数据:最小化敏感通信模式泄露
技术组件:
- X3DH(扩展三重DH):初始密钥协商
- Double Ratchet算法:持续更新密钥
- 预共享密钥:抵抗未来量子计算攻击
- AEAD加密:确保消息机密性和完整性
工作流程:
- 注册:用户生成身份密钥对、签名预密钥和一批一次性预密钥
- 初始协商:使用X3DH建立初始共享密钥
- 会话维护:通过Double Ratchet算法定期更新密钥
- 消息传递:使用派生密钥加密消息,确保安全属性
应用产品:
- Signal Messenger
- Facebook Messenger私密对话
- Google Messages的RCS加密
实现库:
- libsignal(多平台实现)
- Signal Protocol Java库
- Signal Protocol JavaScript库
3.3 IKEv2:互联网密钥交换协议
IKEv2 (Internet Key Exchange version 2) 是IPsec VPN的关键组件,负责认证VPN对等体并建立安全关联(SA)。
协议功能:
- 相互认证:确保连接双方身份
- 密钥协商:安全生成共享密钥
- 建立安全关联:定义IPsec通信参数
- 支持NAT穿越:解决网络地址转换问题
- 快速恢复:提高移动设备连接可靠性
技术细节:
- 消息交换格式:请求/响应对,简化错误处理
- 认证方法:预共享密钥、数字证书、EAP
- DH密钥交换:支持多种组,包括椭圆曲线选项
- 生存检测:快速检测失效连接
- 密钥材料生成:使用PRF(伪随机函数)
应用场景:
- 站点到站点VPN
- 远程访问VPN
- 移动VPN连接(特别适合切换网络)
主要实现:
- strongSwan(开源IKEv2实现)
- Cisco IOS/IOS-XE
- Windows 10/11内置VPN客户端
- iOS/macOS内置VPN客户端
3.4 密码学协议对比
特性 | TLS 1.3 | Signal协议 | IKEv2 |
---|---|---|---|
主要用途 | Web安全、API通信 | 即时消息加密 | VPN隧道建立 |
握手往返次数 | 1-RTT (0-RTT恢复) | 异步/非交互式 | 2-RTT |
前向安全性 | 支持 | 强支持(每消息) | 支持(可选) |
后向安全性 | 不支持 | 支持 | 不支持 |
认证方法 | 证书、PSK | 身份密钥+指纹验证 | PSK、证书、EAP |
密钥协商 | (EC)DHE | X3DH+Double Ratchet | (EC)DHE |
协议复杂度 | 中等 | 高 | 高 |
故障恢复能力 | 中等 | 强 | 强 |
部署普及度 | 极高 | 高(即时通讯) | 高(企业VPN) |
标准化 | IETF RFC 8446 | 开放规范 | IETF RFC 7296 |
四、后量子密码学
后量子密码学(PQC)是为了应对量子计算威胁而发展的新型密码学分支。量子计算机一旦实用化,将能通过Shor算法快速破解RSA、ECC等传统密码系统。后量子密码学提供了能够抵抗量子计算攻击的替代方案。
4.1 基于格的密码学
格密码学是后量子密码学中最成熟、应用最广泛的分支,基于格中的硬问题。
NTRU
NTRU是最早的实用格基加密系统之一,基于多项式环中的格问题。
技术原理:
- 使用两个小系数多项式作为私钥
- 公钥是这两个多项式的商在特定环中的表示
- 加密通过与随机多项式的组合实现
- 解密使用私钥多项式执行逆运算
优势:
- 高效实现:比RSA和ECC快数倍
- 专利过期:可自由使用
- 长期安全研究:自1996年提出以来持续研究
应用场景:
- 长期数据加密
- 嵌入式系统加密
- 物联网安全通信
实现工具:
- NTRU Open Source Project
- OpenQuantumSafe库
- Bouncy Castle新版
CRYSTALS-Kyber
Kyber是NIST后量子密码标准化过程中的获胜者,采用模块化学习带错误(MLWE)问题。
技术特点:
- 模块化设计:更高效的实现和验证
- 可调参数集:根据安全需求和性能平衡
- CCA2安全:抵抗自适应选择明文攻击
应用前景:
- 成为后量子TLS的标准KEM
- 替代现有密钥协商协议
- 用于混合加密方案
实现状态:
- 正在集成到主流密码库
- 多语言实现可用
- TLS和SSH的实验性支持
4.2 基于哈希的密码学:SPHINCS+
SPHINCS+是一种无状态哈希基签名方案,仅依赖哈希函数的安全性,不需要额外的密码学假设。
关键技术:
- 超树结构:使用多层默克尔树
- 少量签名:减少签名大小和生成时间
- FORS(Forest of Random Subsets):提高安全性和效率
优缺点:
- 优点:保守安全假设,仅依赖哈希函数
- 缺点:大签名尺寸(约30KB)和较慢的签名生成
适用场景:
- 固件验证
- 软件发布签名
- 长期证书
实现工具:
- SPHINCS+参考实现
- PQClean项目
- Open Quantum Safe框架
4.3 基于多变量多项式的密码学:Rainbow
Rainbow是一种多变量公钥密码系统,基于多变量二次方程组求解的困难性。
技术细节:
- 油和醋结构:特殊结构使签名生成高效
- 多层设计:平衡安全性和效率
- 小签名尺寸:相比其他后量子方案优势明显
安全状态:
- 注意:2022年被发现存在安全问题
- 不再被推荐用于生产环境
- 研究继续改进下一代方案
研究价值:
- 多变量密码学仍是重要研究方向
- 为未来抗量子签名提供思路
- 合适参数集可能恢复安全性
4.4 基于超椭圆曲线同源系统的密码学:SIKE
SIKE (Supersingular Isogeny Key Encapsulation) 基于超奇异椭圆曲线同源图的计算困难性。
原理概述:
- 使用超奇异椭圆曲线的同源映射
- 公钥是曲线变换的结果
- 私钥是产生特定同源的整数
- 共享秘密通过计算特殊曲线上的j-不变量获得
技术特点:
- 最紧凑的后量子方案:密钥和密文尺寸小
- 基于传统椭圆曲线操作:可利用现有硬件加速
- 计算密集型:操作复杂且计算量大
安全状态:
- 注意:2022年被Castryck-Decru攻击破解
- 已退出NIST标准化流程
- 研究团队正开发改进版本
研究意义:
- 同源密码学仍是活跃研究领域
- 为紧凑型后量子方案提供思路
- 改进版本可能修复当前缺陷
4.5 后量子密码学方案对比
特性 | NTRU | CRYSTALS-Kyber | SPHINCS+ | Rainbow | SIKE |
---|---|---|---|---|---|
密码类型 | 加密/KEM | KEM | 签名 | 签名 | KEM |
数学基础 | 格问题 | 模块化格问题 | 哈希函数 | 多变量方程 | 同源图 |
公钥大小 | 699-1230字节 | 800-1568字节 | 32-64字节 | ~60KB | ~330字节 |
密文/签名大小 | 699-1230字节 | 768-1568字节 | ~17-50KB | ~33字节 | ~330字节 |
运算速度 | 快 | 快 | 慢 | 中等 | 非常慢 |
标准化状态 | 备选 | NIST第一轮选定 | NIST第一轮选定 | 已淘汰 | 已淘汰 |
安全状态 | 安全 | 安全 | 安全 | 已攻破 | 已攻破 |
实现成熟度 | 高 | 中高 | 中 | 中 | 中 |
主要优势 | 长期研究 | 效率与安全平衡 | 保守安全假设 | 小签名尺寸 | 小密钥尺寸 |
主要劣势 | 参数选择复杂 | 相对新 | 大签名尺寸 | 安全问题 | 已被攻破 |
相关文章:
对比表格:数字签名方案、密钥交换协议、密码学协议、后量子密码学——密码学基础
文章目录 一、数字签名方案1.1 ECDSA:基于椭圆曲线的数字签名算法1.2 EdDSA:Edwards曲线数字签名算法1.3 RSA-PSS:带有概率签名方案的RSA1.4 数字签名方案对比 二、密钥交换协议2.1 Diffie-Hellman密钥交换2.2 ECDH:椭圆曲线Diffi…...
在MySQL中建索引时需要注意哪些事项?
在 MySQL 中建立索引是优化查询性能的重要手段,但不当的索引设计可能导致资源浪费、性能下降甚至拖慢写入速度。 所以我们我们首先要判断对于一个字段或者一些字段要不要建立索引。 适合建立索引的字段通常是: 主键字段:MySQL 会自动为主键…...
dstack 是 Kubernetes 和 Slurm 的开源替代方案,旨在简化 ML 团队跨顶级云、本地集群和加速器的 GPU 分配和 AI 工作负载编排
一、软件介绍 文末提供程序和源码下载 dstack 是 Kubernetes 和 Slurm 的开源替代方案,旨在简化顶级云和本地集群中 ML 团队的 GPU 分配和 AI 工作负载编排。 二、Accelerators 加速器 dstack 支持 NVIDIA 开箱即用的 、 AMD 、 Google TPU 和 Intel Gaudi 加速器…...
Linux 的 epoll 与 Windows 的 IOCP 详解
如果你在搞网络编程或者高性能服务器,一定要搞懂这两个模型——它们都是用来解决“多路复用”问题的工具,让你同时处理大量的网络连接变得高效又可控。 一、什么是“多路复用”? 简单说,就是你手里有很多任务(比如很多客户端的请求),但系统的核心(线程或者进程)资源…...
C# 方法(控制流和方法调用)
本章内容: 方法的结构 方法体内部的代码执行 局部变量 局部常量 控制流 方法调用 返回值 返回语句和void方法 局部函数 参数 值参数 引用参数 引用类型作为值参数和引用参数 输出参数 参数数组 参数类型总结 方法重载 命名参数 可选参数 栈帧 递归 控制流 方法包含了组成程序的…...
Webug4.0靶场通关笔记11- 第15关任意文件下载与第16关MySQL配置文件下载
目录 一、文件下载 二、第15关 任意文件下载 1.打开靶场 2.源码分析 3.渗透实战 三、第16关 MySQL配置文件下载 1.打开靶场 2.源码分析 3.渗透实战 (1)Windows系统 (2)Linux系统 四、渗透防御 一、文件下载 本文通过…...
More Effective C++学习笔记
条款1 指针与引用的区别 条款2 尽量使用C风格的类型转换 条款3 不要对数组使用多态 条款4 避免无用的缺省构造函数 条款5 谨慎定义类型转换函数 条款6 自增(increment)、自减(decrement)操作符前缀形式与后缀形式的区别 条款7 不要重载“&&”,“||”, 或“,” 条款8 理…...
如何设计抗Crosstalk能力强的PCB镀穿孔
一个高速PCB通道通常包含芯片SerDes IP、走线、穿层Via、连接器和Cable。 其中内层走线对于Crosstalk影响甚微(请参考什么? Stripline的FEXT为0! Why? ),而Via与连接器由于其参考路径较差的关系,…...
多线程系列三:这就是线程的状态?
1.认识线程的状态 NEW:Thread对象已经创建好了,但还没有调用start方法在系统中创建线程 RUNNABLE:就绪状态,表示这个线程正在CPU上执行,或准备就绪,随时可以去CPU上执行 BLOCKED:表示由于锁竞争…...
生成对抗网络(GAN, Generative Adversarial Network)
定义:一种通过对抗训练让两个神经网络(生成器与判别器)相互博弈的深度学习模型,用于生成逼真的数据(如图像、音频、文本等)。 一、核心思想:对抗博弈 GAN的核心是让两个神…...
用可视化学习逆置法
1.逆置法思路 目标:将这个彩色数组向右旋转3步 🔴1 → 🟠2 → 🟡3 → 🟢4 → 🔵5 → 🟣6 → ⚪7我们希望得到 🔵5 → 🟣6 → ⚪7 → 🔴1 → 🟠…...
家用服务器 Ubuntu 服务器配置与 Cloudflare Tunnel 部署指南
Ubuntu 服务器配置与 Cloudflare Tunnel 部署指南 本文档总结了我们讨论的所有内容,包括 Ubuntu 服务器配置、硬盘扩容、静态 IP 设置以及 Cloudflare Tunnel 的部署步骤。 目录 硬盘分区与扩容设置静态 IPCloudflare Tunnel 部署SSH 通过 Cloudflare Tunnel常见…...
【C++篇】类和对象(上)
目录 类的定义格式: 内敛函数: 类与struct的区别: 类的访问权限: 类域: 类的实例化: 对象大小: 计算对象的大小时,也存在内存对齐(与结构体一样)&…...
ES6/ES11知识点 续一
模板字符串 在 ECMAScript(ES)中,模板字符串(Template Literals)是一种非常强大的字符串表示方式,它为我们提供了比传统字符串更灵活的功能,尤其是在处理动态内容时。模板字符串通过反引号&…...
ES6入门---第二单元 模块二:关于数组新增
一、扩展运算符。。。 1、可以把ul li转变为数组 <script>window.onloadfunction (){let aLi document.querySelectorAll(ul li);let arrLi [...aLi];arrLi.pop();arrLi.push(asfasdf);console.log(arrLi);};</script> </head> <body><ul><…...
使用python加edge-tts实现文字转语音
文章目录 使用python加edge-tts实现文字转语音1. 使用 Python 安装 Edge-TTS2. 进一步优化3. 使用说明3.1 查看语音列表3.2 单语音转换3.3 批量生成所有语音3.4 改进亮点4. 使用教程最终代码文章创作不易使用python加edge-tts实现文字转语音 Edge-TTS(edge-tts Python 模块)本…...
如何用CSS实现HTML元素的旋转效果:从基础到高阶应用
在网页设计中,元素的动态效果能显著提升用户体验,而旋转效果是其中最常用的交互方式之一。CSS的transform属性提供了强大的旋转功能,结合动画(animation)和过渡(transition),开发者可…...
轻量级RTSP服务模块:跨平台低延迟嵌入即用的流媒体引擎
在音视频流媒体系统中,RTSP(Real-Time Streaming Protocol)服务模块通常扮演着“视频分发中心”的角色,它将编码后的音视频内容转为标准的流媒体格式,供客户端(播放器、云端平台、AI模块等)拉流…...
AVInputFormat 再分析
AVInputFormat 是 FFmpeg 中用于描述输入格式(如文件容器、设备流等)的核心结构体,属于 libavformat 库的一部分。其主要功能是定义解封装(demuxing)过程中如何解析不同格式的输入数据。以下是其关键特性与使用方式的总…...
wpf CommandParameter 传递MouseWheelEventArgs参数
在 WPF 中通过 CommandParameter 传递 MouseWheelEventArgs 参数时,需结合 事件到命令的转换机制 和 参数转换器 来实现。以下是具体实现方案及注意事项: 一、核心实现方法 1. 使用 EventToCommand 传递原始事件参数 通过 Interaction.Tr…...
摆脱养生误区泥沼,拥抱科学养生阳光
在养生的道路上,人们总是满怀热忱地追寻健康之道,然而,诸多似是而非的养生误区却如同泥沼一般,让不少人深陷其中,难以自拔。只有奋力摆脱这些误区的束缚,才能拥抱科学养生的温暖阳光,真正实现身…...
FreeRtos实战从入门到精通--任务创建和删除(动态方法)--事了拂衣去,深藏功与名
FreeRtos是之前的一些聪明的工程师写的免费且开源的嵌入式实时操作系统代码,由于我们实际工作中不需要再去写rtos,我们只需要用就行了,所以博主这里只分享项目工程实战相关的内容,具体rtos源码,可以无需理会࿰…...
卷积神经网络进化史:从LeNet-5到现代架构的完整发展脉络
摘要 本文系统梳理卷积神经网络(CNN)从诞生到繁荣的发展历程。从1998年Yann LeCun开创性的LeNet-5出发,重点解析2012年引爆深度学习革命的AlexNet,并详细拆解后续演进的五大技术方向:网络深度化(VGG)、卷积功能强化(ResNet)、检测任务迁移(F…...
《Qt C++ 项目中升级 GCC 版本的完整指南》
Qt C++ 项目中升级 GCC 版本的完整指南 在 Qt C++ 项目中升级 GCC 版本可能会影响编译工具链、Qt 库兼容性以及项目配置。以下是针对不同操作系统的升级步骤和注意事项: 一、为什么需要升级 GCC 版本? C++ 标准支持:新版本 GCC 支持 C++17/20 等新标准特性性能优化:编译速…...
Baklib赋能企业知识管理数字化转型
Baklib驱动知识智慧转化 在数字化浪潮中,企业知识资产的碎片化与低效流转已成为制约业务创新的核心瓶颈。Baklib作为新一代知识中台,通过构建智能化的知识治理体系,将分散的文档、数据与经验转化为可复用的业务智慧。其核心能力体现在多模态…...
LeetCode240. 搜索二维矩阵 II(巧妙转换)
编写一个高效的算法来搜索m x n矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 题目中最关键的信息就是每行从左到右升序,每列从左到右升序,如果暴力的话就用不到…...
AVFormatContext 再分析二
说明 :将 avfromatContext 的变量依次打印分析,根据ffmpeg 给的说明,猜测,结合网上的文章字节写测试代码分析二。 37 AVInputFormat *iformat; /** * The input container format. * * Demuxing only, set by avfo…...
leetcode0096. 不同的二叉搜索树-medium
1 题目:不同的二叉搜索树 官方标定难度:中 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n 3 输出…...
【科研绘图系列】R语言绘制世界地图(map plot)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图输出图片系统信息介绍 【科研绘图系列】R语言绘制世界地图(map plot) 加载R包 library(ggmap) library(RColorBrewer) library(pals) …...
【原创】风云扫描王[特殊字符]OCR识别翻译!证件照
📣文字识别,文字提取,扫描翻译,证件扫描,表格识别,PDF加水印等一体的扫描应用。扫描任何东西,包括文件、纸质笔记、收据和书籍,把它们扫描成清晰的PDF文件和图像。使用OCR技术将图像…...
Fabrice Bellard(个人网站:bellard.org)介绍
Fabrice Bellard 是法国人,国际知名程序员。 Fabrice Bellard(个人网站:bellard.org)是计算机领域最具影响力的程序员之一,其贡献跨越多个技术领域并持续推动开源生态发展。以下是其关键成就与技术贡献的梳理&…...
Linux电源管理(5)_Hibernate和Sleep功能介绍
原文:Linux电源管理(5)_Hibernate和Sleep功能介绍 1. 前言 Hibernate和Sleep两个功能是Linux PM的核心功能,它们的目的是类似的:暂停使用——>保存上下文——>关闭系统以节电>恢复系统——>恢复上下文——>继续使用。 本文…...
【C/C++】Linux的futex锁
文章目录 Linux Futex1. 概述2. 核心设计思想3. Futex 系统调用接口4. 核心操作4.1 阻塞等待 (FUTEX_WAIT)4.2 唤醒线程 (FUTEX_WAKE)4.3 进阶操作 5. Futex 的使用场景5.1 实现用户态互斥锁 (Mutex)5.2 实现条件变量 (Condition Variable) 6. Futex 的优缺点7. Futex 与传统同…...
ChatGPT:重塑人工智能交互范式的破晓之作
2022年11月30日,总部位于旧金山的研究公司OpenAI正式发布了ChatGPT——一款以病毒式传播速度席卷全球的AI聊天机器人。它不仅能像人类一样生成内容、回答问题和解决问题,更在推出后的两个月内吸引了超过1亿月活跃用户,刷新了消费级技术应用的…...
java面向对象编程【高级篇】之特殊类
目录 🚀前言🌟final关键字💯常量 🦜单例类💯饿汉式单例类💯懒汉式单例类 ✍️枚举类🐍抽象类💯应用场景💯模版方法设计模式 ⚙️接口💯实现类💯接…...
JVM 一文详解
目录 JVM 简介 JVM 中的内存区域划分 1. 堆(一个进程只有一份 ------ 线程共享) 2. 栈(一个进程可以有 N 份 ------ 线程私有) Java 虚拟机栈: 本机方法栈: 3. 程序计数器(一个线程可以…...
PVD中断检测掉电
文章目录 概述配置掉电擦写注意 概述 STM32 PVD功能具体可以检测到上电、掉电瞬间,其处理方式有中断响应及事件响应。掉电设置为上升沿触发,上电为下降沿触发 配置 1.开启PVD中断并设置其优先级 2.配置响应中断或事件的阈值电压 3.配置响应模式 生成…...
Nginx — 防盗链配置
防盗链简述 防盗链是一种保护网络资源所有者权益的技术手段,旨在防止未经授权的用户或网站通过直接链接的方式盗用资源,以下是关于防盗链的简述: 原理 基于请求头验证:服务器通过检查请求头中的特定字段,如Referer字…...
题解:P2485 [SDOI2011] 计算器
### 思路 本题是一个比较模板化的题目。 #### 一操作 考虑使用快速幂。 快速幂,只需要把 $k$ 变成二进制即可实现 $\Theta(\log k)$ 的时间复杂度。 实现方法: cpp long long qmi(long long a,long long k,long long p){ long long res 1; …...
【算法刷题笔记day one】滑动窗口(定长基础版)
前言 hello大家好呀 好久不见,上次更新是去年12月份的事情了。这段时间好好沉淀了一下,打了几场比赛,论文也写了一些,也收集了不少信息,对未来方向也有了不一样的计划。 这个算法系列可以说是接着我之前的数据结构系…...
Redis从入门到实战实战篇2
面试重点:本篇包含悲观锁,乐观锁,多线程以及分布式锁的知识 目录 3.优惠卷秒杀 3.1 -全局唯一ID 3.2 -Redis实现全局唯一Id 3.3 添加优惠卷 3.4 实现秒杀下单 3.5 库存超卖问题分析 3.6 乐观锁解决超卖问题 3.7 优惠券秒杀-一人一单 …...
代码随想录算法训练营Day43
力扣300.最长递增子序列 力扣674.最长连续递增子序列【easy】 力扣1143.最长公共子序列【medium】 力扣718.最长重复子数组【medium】 一、力扣300.最长递增子序列【medium】 题目链接:力扣300.最长递增子序列 视频链接:代码随想录 题解链接:…...
Scrapy框架之【settings.py文件】详解
settings.py 文件的主要作用是对 Scrapy 项目的全局设置进行集中管理。借助修改这个文件中的配置项,你可以对爬虫的行为、性能、数据处理等方面进行灵活调整,而无需修改爬虫代码。 ①默认英文注释settings.py # Scrapy settings for douban project # …...
Nginx发布Vue(ElementPlus),与.NETCore对接(腾讯云)
案例资料链接:https://download.csdn.net/download/ly1h1/90745660 1.逻辑说明 1.1 逻辑示意图 # 前端请求处理逻辑图浏览器请求流程: 1. 浏览器发起请求├─ 开发环境(DEV)│ ├─ 请求URL: http://192.168.0.102:3000/api/xxx│ └─ 被Vite代理处理└─ 生产…...
深入探索 AAC 编码原理与 ADTS 格式:音频世界的智慧结晶
在数字音频的广阔领域中,AAC 编码及其相关的 ADTS 格式扮演着至关重要的角色。无论是在我们日常使用的音乐 APP,还是高清视频中的音频部分,都能看到它们的身影。今天,就让我们深入探索 AAC 编码原理与 ADTS 格式的奥秘,…...
深度学习核心架构:探明四种基础神经网络
摘要 本文对多层感知机(MLP)、卷积神经网络(CNN)、循环神经网络(RNN)和注意力机制等深度学习核心架构的内部运作机制进行可视化分析。通过展示参数学习过程、激活映射和注意力分布等关键特征,揭示了"黑箱"模型的内部工作原理,为模型可解释性研…...
解析机器人 2.0.2 | 支持超过50种短视频平台的链接解析,无水印提取,多功能下载工具
解析机器人是一款功能强大的工具软件,登录即可解锁会员特权。它支持超过50种短视频平台的链接解析,包括抖音、快手、西瓜、bilibili等,并能实现无水印提取。此外,还提供P2P下载、磁力链等多种下载方式,确保用户能够快速…...
【漫话机器学习系列】237. TSS总平方和
深度理解 TSS(总平方和):公式、意义与应用 在机器学习与统计建模领域,评价模型好坏的重要指标之一就是方差与误差分析。其中,TSS(Total Sum of Squares,总平方和)扮演着非常关键的角…...
flutter3.29 build.gradle.kts设置安卓签名
1、在android目录下创建key.properties文件 storePassword密码 keyPassword密码 keyAlias别名 storeFilejks文件完整路径 2、修改android/app/build.gradle.kts 顶部插入import java.util.Properties import java.io.FileInputStreamval keystoreProperties Properties() v…...
<servlet-class>和</url-pattern>的作用
在 SpringMVC 的 web.xml 配置中,<servlet-class> 和 <url-pattern> 是两个关键配置项,分别用于指定处理请求的 Servlet 类和定义该 Servlet 拦截的请求路径规则。以下是它们的具体作用及原理分析: 一、<servlet-class> 的…...