HDCP(二)
HDCP加密算法实现详解
HDCP(高带宽数字内容保护)的加密算法实现涉及对称加密、密钥派生、动态同步机制等核心环节,其设计兼顾实时性与安全性。以下从算法类型、流程实现、硬件集成等角度展开分析:
1. 加密算法类型与版本差异
• HDCP 1.x:
采用专有流密码算法,通过24位密钥对数据进行异或操作加密。例如,HDCP 1.3在视频流中每帧生成24位伪随机数,与原始数据异或后传输,接收端同步解密。
• 密钥生成:基于共享密钥Km
,通过HDCP专有算法生成会话密钥Ks
。
• 同步验证:每128帧计算Ri
值(16位验证码),防止传输链路篡改。
• HDCP 2.x:
升级为AES-128-CTR模式,支持更高安全性与标准化实现。
• 加密流程:
其中`k_s`为会话密钥,`riv`为随机初始化向量,`frame_counter`为递增帧计数器。
• 动态密钥:会话密钥k_s
每400ms更新一次,单次破解无法获取完整视频流。
2. 密钥管理与派生机制
• 主密钥(k_m
)交换:
• HDCP 2.x:通过RSA-2048/OAEP加密传输k_m
,接收端用私钥解密。首次认证时生成随机k_m
并加密存储(E_{kh}(k_m)
),后续通过配对模式复用。
• 密钥派生:基于k_m
和随机数r_tx
、r_rx
,通过AES生成动态密钥dkey_i
:
其中`dkey_2`用于加密会话密钥`k_s`。
• 同步机制:
• 初始化向量(riv
):64位高质量随机数,需硬件RNG生成(符合NIST SP 800-90标准)。
• 帧计数器:随视频帧递增,与垂直消隐间隔同步,防止加密块错位。若检测到溢出或异步信号,触发密钥重新协商(SKE_Reinit
)。
3. 硬件实现与优化
• 分层架构(以FPGA为例):
- 控制层:通过Avalon-MM接口与处理器交互,管理认证状态机。
- 加密引擎:集成AES-CTR模块,支持并行处理视频流(如Intel FPGA的AES-NI指令集)。
- 密钥存储:安全存储器存放
k_m
和全局常量lc128
,通过HDCP Key Port加载。
• 寄存器操作示例:
// 生成riv并启动加密
REG_CRYPTO_CMD = 0x00000080; // 设置GEN_RIV位
while (!(REG_CRYPTO_STATUS & 0x80)); // 等待操作完成
4. 安全合规与异常处理
• 抗重放攻击:
• 强制重置riv
和帧计数器,检测重复加密块。
• HDCP 2.x引入Locality Check,要求物理链路延迟≤20ms,防止远程中间人攻击。
• 可更新性机制:
• SRM(系统可更新消息):存储被吊销设备的ID列表,通过DSA签名保障完整性。
• 密钥泄露应对:主密钥k_m
泄露后,通过SRM更新使旧密钥失效,需重新配对设备。
5. 开发调试建议
- 实验验证:
• 在FPGA开发板实现AES-CTR模块,模拟riv
生成与帧同步逻辑。
• 使用逻辑分析仪捕获I²C总线的AKE_Send_Cert
和SKE_Send_Eks
消息。 - 合规测试:
• 参考DCP LLC的HDCP 2.3 CTS测试套件,验证加密一致性(如解密后无像素错位)。
• 确保密钥存储模块抗侧信道攻击(如TPM芯片或安全内存)。
总结
HDCP加密算法的实现需重点关注动态密钥派生(AES-CTR与RSA结合)、硬件加速优化(如AES-NI指令集)及同步机制设计(帧计数器与Locality Check)。开发者需结合协议版本差异(如HDCP 1.x的流密码与2.x的AES-CTR)和硬件平台特性进行定制化实现,同时严格遵循NIST与FIPS安全规范。
认证与密钥交换(AKE)流程深度解析
1. 核心流程详解
步骤1:AKE_Init
初始化
• 功能:发射端(Transmitter, Tx)发起认证请求,生成随机数r_tx
(64位伪随机码)并发送TxCaps
(协议版本信息)。
• 实现细节:
• r_tx
需通过硬件随机数生成器(HRNG)生成,符合NIST SP 800-90标准。
• TxCaps
需包含支持的HDCP版本(如2.3)、中继层级限制(如最大4层)等参数。
步骤2:AKE_Send_Cert
证书响应
• 功能:接收端(Receiver, Rx)返回证书cert_rx
、随机数r_rx
和RxCaps
。
• 证书内容:
• cert_rx
包含Receiver ID
(40位唯一标识)、接收端公钥k_pub_rx
、DCP LLC的签名(RSA-2048/SHA-256)。
• 签名验证:Tx需使用预置的DCP LLC公钥(k_pub_dcp
)验证签名合法性。
步骤3:主密钥k_m
生成与加密传输
• 无存储k_m
时:
• Tx生成128位随机数作为k_m
,通过RSA-OAEP算法用k_pub_rx
加密为E_kpub(km)
发送。
• 加密合规性:填充模式需符合RFC 8017规范,避免选择密文攻击。
• 已存储k_m
时:
• 直接调用预存的E_kh(km)
(kh
由接收端私钥哈希派生),跳过密钥生成步骤以加速认证。
步骤4:HMAC-SHA256密钥一致性验证
• 计算流程:
• 双方基于k_m
、r_tx
、r_rx
派生中间密钥kd = HMAC-SHA256(k_m, r_tx || r_rx)
。
• Tx计算H = HMAC-SHA256(kd, TxCaps || RxCaps)
,Rx计算H'
并返回。
• 验证失败处理:若H ≠ H'
或超时(1秒限制),触发认证失败并记录错误码。
2. 驱动开发核心要点
证书处理与安全存储
-
DCP LLC公钥预置:
• 公钥需固化在驱动固件中(如Appendix B
的X.509证书),禁止运行时动态加载。
• 实现示例(C语言伪代码):const uint8_t k_pub_dcp[] = {0x30, 0x82, 0x01, 0x0A, ...}; // DCP LLC公钥 if (rsa_verify(k_pub_dcp, cert_rx.signature, cert_rx.data) != SUCCESS) { log_error("Certificate invalid"); }
-
主密钥
k_m
存储:
• 安全存储介质:使用TPM芯片或安全内存区域(如ARM TrustZone),禁止明文存储。
• 加密备份:若需持久化存储,需通过硬件绑定密钥(如SoC的OTP密钥)加密k_m
。
错误处理与状态机设计
• 超时重试机制:
• AKE_Send_Cert
响应超时(100ms)、H'
验证超时(1秒)均触发重试,最多3次后终止。
• 吊销列表(SRM)检查:
• 在验证Receiver ID
后,需查询SRM列表(定期从内容源更新),若命中则拒绝连接。
性能优化
• 硬件加速:
• RSA运算:使用专用IP核(如FPGA的RSA-2048模块)或CPU的AES-NI指令集。
• HMAC-SHA256:通过DMA通道批量处理数据,减少CPU负载。
• 配对模式优化:
• 已配对的k_m
可缓存于安全内存,后续认证跳过密钥生成步骤,缩短延迟至50ms以内。
3. 测试与调试建议
-
协议合规性测试:
• 使用DCP LLC提供的HDCP 2.3 CTS测试套件,验证证书签名、密钥派生、加密一致性等场景。
• 重点用例:
◦ 模拟SRM更新,检查吊销设备是否被正确拦截。
◦ 强制r_tx
/r_rx
碰撞,验证随机性质量。 -
调试工具链:
• 逻辑分析仪:捕获I²C总线的AKE_Init
、AKE_Send_Cert
消息,解析字段合法性。
• 安全审计:通过侧信道分析(如功耗轨迹)检测密钥泄露风险。
4. 典型问题与解决方案
问题1:证书验证失败(错误码0x0E)
• 原因:DCP LLC公钥损坏或证书签名无效。
• 解决:
- 校验固件中的公钥哈希值(如SHA-256)。
- 检查接收端证书是否来自合法授权厂商。
问题2:HMAC-SHA256不匹配(错误码0x12)
• 原因:k_m
派生错误或参数传递错位。
• 解决:
- 核对
r_tx
、r_rx
传输完整性(如CRC校验)。 - 检查HMAC计算输入数据是否包含
TxCaps
和RxCaps
。
位置验证(Locality Check)深度解析
位置验证(Locality Check)是HDCP 2.2引入的核心安全机制,旨在确保接收端(如显示器)与发射端(如播放器)物理邻近,防止远程中间人攻击。以下从流程、技术实现、开发要点等角度展开分析:
1. 核心目的
• 防远程窃取:禁止通过远程代理设备(如网络传输)非法获取受保护内容。
• 链路物理性验证:通过时间敏感性计算(20ms响应限制),确保设备处于同一物理链路中。
2. 流程详解
步骤1:初始化(LC_Init)
• 发射端生成64位随机数rn
,通过I²C总线发送至接收端。
• 随机数质量要求:rn
需符合NIST SP 800-90标准,由硬件随机数生成器(HRNG)产生。
步骤2:HMAC-SHA256计算
• 接收端需在20ms内完成以下操作:
- 基于预共享密钥
kd
(派生自主密钥k_m
和随机数r_tx
/r_rx
)计算中间值kd_xor = kd ⊕ r_rx
。 - 生成验证值
L' = HMAC-SHA256(kd_xor, rn)
,并返回至发射端。
步骤3:验证与重试
• 发射端计算本地L = HMAC-SHA256(kd_xor, rn)
,若L ≠ L'
或超时(>20ms),触发认证失败。
• 重试机制:最多允许1024次重试,每次需更换新rn
。
3. 技术实现要点
硬件依赖性
• 实时性保障:需通过硬件加速模块(如FPGA的HMAC-SHA256 IP核)缩短计算延迟,避免软件实现导致的超时。
• 安全存储:kd
需存储于防篡改模块(如TPM芯片),防止侧信道攻击泄露密钥。
错误处理
• 超时日志:记录超时次数与rn
值,用于安全审计与攻击溯源。
• 中继器场景:若接收端为中继器(如AV功放),需同步验证下游设备拓扑层级(≤4层)与设备数量(≤32个)。
4. 开发调试建议
-
仿真测试:
• 使用逻辑分析仪捕获LC_Init
与LC_Send_L'
的I²C总线时序,验证20ms响应窗口。
• 模拟rn
碰撞攻击,检测随机数生成器的抗碰撞能力。 -
性能优化:
• 批量计算:在HMAC-SHA256模块中预计算kd_xor
,减少实时计算负载。
• 硬件加速:集成ASIC或FPGA的SHA-256引擎,确保单次计算时间≤5ms。
5. 与其他机制的关联
• SRM吊销机制:位置验证失败后,需检查接收端ID是否在系统可更新消息(SRM)的吊销列表中。
• 会话密钥派生:成功通过位置验证后,方可进入会话密钥交换(SKE),生成动态密钥k_s
用于AES加密。
总结
位置验证通过时间敏感加密挑战-响应机制,将物理邻近性转化为可计算的安全指标。开发中需重点关注硬件加速实现、随机数质量及错误处理逻辑,确保符合HDCP 2.3规范要求。
会话密钥交换(SKE)技术实现深度解析
会话密钥交换(SKE)是HDCP 2.2认证流程的第三阶段,其核心目标是动态生成会话密钥以加密音视频内容,并确保密钥安全传输至接收端。以下结合协议规范与开发实践,从流程、加密机制、中继器处理等角度展开分析:
1. SKE核心流程
步骤1:会话密钥生成
• 密钥生成:发送端(Transmitter)生成128位伪随机会话密钥k_s
和64位随机初始化向量riv
。
• 随机性要求:k_s
和riv
需通过硬件随机数生成器(HRNG)生成,符合NIST SP 800-90标准。
• 唯一性保障:每个会话的k_s
和riv
必须唯一,防止重放攻击。
步骤2:密钥派生与加密
• 派生加密密钥dkey_2
:
基于主密钥k_m
(AKE阶段交换)和随机数r_tx
、r_rx
,通过AES-128-CTR模式生成dkey_2
:
dkey_2 = \text{AES-128}(k_m, r_tx \parallel (r_rx \oplus 2))
其中r_tx
和r_rx
为AKE阶段交换的随机数。
• 加密k_s
:
• 使用dkey_2
对k_s
进行异或加密,生成密文E_{dkey_2}(k_s)
。
• 通过SKE_Send_Eks
消息将加密后的k_s
和riv
发送至接收端。
步骤3:接收端解密与密钥应用
• 解密k_s
:接收端使用相同的dkey_2
解密E_{dkey_2}(k_s)
,恢复明文k_s
。
• 加密内容流:
• 发送端使用k_s
和riv
通过AES-128-CTR模式加密音视频数据块。
• 接收端同步解密,公式如下:
math \text{plaintext} = \text{ciphertext} \oplus \text{AES-128}(k_s, riv + \text{frame\_counter})
其中frame_counter
为递增帧计数器。
2. 中继器(Repeater)处理
• 拓扑信息上报:
• 若接收端为中继器,需收集下游所有设备的Receiver ID
列表及拓扑层级(≤4层),并通过HMAC-SHA256计算验证值V'
。
• 发送端验证V'
与本地计算是否一致,并检查设备数量(≤32个),否则触发MAX_DEVS_EXCEEDED
或MAX_CASCADE_EXCEEDED
错误。
• SRM吊销检查:
• 发送端在启用加密前,需校验所有下游设备ID是否在系统可更新消息(SRM)的吊销列表中。
3. 加密机制与安全设计
AES-128-CTR模式
• 加密性能:
• 支持高带宽实时加密(如4K@60Hz),延迟≤1帧周期(约16ms)。
• 使用硬件加速模块(如FPGA的AES-NI核)提升吞吐量。
• 抗重放攻击:
• riv
与frame_counter
的组合确保每次加密的初始化向量唯一。
• 检测frame_counter
溢出或重复,触发密钥重新协商(SKE_Reinit
)。
密钥派生增强
• 秘密常数lc128
:
• 由DCP LLC提供,用于生成最终加密密钥k_{final} = k_s \oplus lc128
。
• 防止k_s
直接泄露导致内容解密。
4. 错误处理与时间约束
• 加密启动延迟:
• 发送端在SKE_Send_Eks
后延迟200ms启用加密,防止时序攻击。
• 超时机制:
• 中继器上报拓扑信息需在3秒内完成,超时触发认证失败。
• riv
生成失败时,需重置HRNG模块并重试(最多3次)。
5. 开发与调试要点
-
硬件加速集成:
• 使用FPGA的AES-CTR模块实现实时加密(如Xilinx AXI DMA IP核)。
• 优化dkey_2
派生逻辑,减少密钥切换延迟。 -
合规性测试:
• 参考HDCP 2.3 CTS测试套件,验证k_s
派生、加密块对齐等场景。
• 模拟riv
碰撞攻击,检测随机数生成器的抗碰撞性。 -
调试工具链:
• 逻辑分析仪捕获I²C总线的SKE_Send_Eks
消息,解析k_s
和riv
字段。
• 使用示波器测量加密启动延迟(200ms窗口)是否符合协议要求。
总结
SKE通过动态会话密钥机制和AES-128-CTR加密,在保障实时性的同时实现高安全性。开发者需重点关注密钥派生逻辑、中继器拓扑验证及硬件加速优化,并严格遵循协议中的时间约束与错误处理规范。
HDCP中继器处理机制深度解析
中继器(Repeater)在HDCP协议中承担拓扑管理、密钥验证与错误传递等关键任务,其处理机制直接影响认证流程的可靠性与安全性。以下结合多篇技术文档,从核心流程、验证机制、错误处理等角度展开分析:
1. 拓扑层级与设备数量管理
• 层级深度计算:
中继器的深度(Depth)定义为下游所有受保护接口的最大连接层级数。例如:
• 直接连接4个接收器(非中继器)的中继器,深度为1(网页1)。
• 若下游存在另一中继器(深度为3),则当前中继器深度为4(网页4)。
• 协议限制:层级深度不得超过7层,否则触发max_cascade_exceed
状态位(网页1、2)。
• 设备总数统计:
• DEVICE_COUNT
统计包括下游所有接收器和中继器的总数。例如,直接连接4个接收器的中继器DEVICE_COUNT=4
(网页1)。
• 若下游存在中继器(其DEVICE_COUNT=5
),则当前中继器的DEVICE_COUNT=4+5=9
(网页3)。
• 协议限制:设备总数超过127或KSV FIFO容量上限时,触发max_devs_exceed
状态位(网页1、3)。
2. KSV列表与完整性验证
• KSV列表组装:
• 每个KSV(Key Selection Vector)占用5字节,按小端字节顺序存储(网页3)。
• 中继器需合并所有下游设备的KSV,包括:
◦ 直接连接的接收器:添加其Bksv。
◦ 下游中继器:添加其Bksv及合并其下游KSV列表(网页1、3)。
• 验证值V计算:
• 使用SHA-1哈希算法计算V = SHA-1(KSV列表 || Bstatus || M0)
,其中:
◦ Bstatus
包含设备状态(如max_devs_exceed
)。
◦ M0
为秘密值,由DCP LLC提供(网页2、3)。
• 若中继器计算的V
与下游中继器返回的V'
不一致,则拒绝断言就绪状态(网页3)。
3. 错误状态传递与超时机制
• 状态位传播:
• 下游中继器检测到max_devs_exceed
或max_cascade_exceed
时,需向上游中继器传递相应状态位(网页1、2)。
• 上游中继器可能选择设置就绪位或直接触发超时(网页1)。
• 时间约束:
• 中继器需在5秒内完成KSV列表组装并断言就绪状态,否则上游发射器终止认证(网页2、3)。
• 顶级发射器设置看门狗定时器(5秒)轮询中继器就绪位(网页3)。
4. 双链路中继器处理
• KSV列表合并:
• 双链路中继器需将两条链路的拓扑信息合并至主链路的KSV FIFO中(网页1、3)。
• 去重规则:可删除重复的KSV值,但重复可能导致下游双链路设备认证失败(网页1)。
• 错误处理:
• 若合并后设备总数或层级超限,触发max_devs_exceed
或max_cascade_exceed
(网页1)。
5. SRM吊销检查与密钥更新
• SRM验证:
• 顶级发射器需检查所有KSV是否在系统可更新消息(SRM)的吊销列表中(网页1、3)。
• 使用DCP LLC公钥验证SRM签名的完整性,失败则认证终止(网页1、2)。
• 密钥泄露应对:
• 若主密钥k_m
泄露,通过SRM更新吊销相关KSV,强制重新配对(网页4)。
总结
中继器处理的核心在于拓扑管理(层级与设备数限制)、KSV完整性验证(SHA-1哈希与SRM检查)及错误状态传递(超时与状态位机制)。开发中需重点关注KSV列表的动态组装效率、硬件加速的SHA-1计算模块设计,以及错误状态的快速传递逻辑,确保符合HDCP 2.3的协议约束。
相关文章:
HDCP(二)
HDCP加密算法实现详解 HDCP(高带宽数字内容保护)的加密算法实现涉及对称加密、密钥派生、动态同步机制等核心环节,其设计兼顾实时性与安全性。以下从算法类型、流程实现、硬件集成等角度展开分析: 1. 加密算法类型与版本差异 •…...
POSIX线程(pthread)库:线程的终止与管理
在POSIX线程(pthread)库中,线程的终止和管理涉及多个关键函数。以下是关于线程终止的pthread系列函数的详细介绍: 1. pthread_exit:线程主动退出 ✨ 功能: 允许线程主动终止自身,并返回一个退出…...
Elasticsearch 系列专题 - 第三篇:搜索与查询
搜索是 Elasticsearch 的核心功能之一。本篇将介绍如何构建高效的查询、优化搜索结果,以及调整相关性评分,帮助你充分发挥 Elasticsearch 的搜索能力。 1. 基础查询 1.1 Match Query 与 Term Query 的区别 Match Query:用于全文搜索,会对查询词进行分词。 GET /my_index/_…...
【AI提示词】Emoji风格排版艺术与设计哲学
提示说明 Emoji风格排版艺术与设计哲学。 提示词 请使用 Emoji 风格编辑以下段落,该风格以引人入胜的标题、每个段落中包含表情符号和在末尾添加相关标签为特点。请确保保持原文的意思。使用案例(春日穿搭) 🌸 2025春季穿搭灵…...
C语言 ——— 认识C语言
认识 main 函数 main 函数是程序的入口,程序执行时会从 main 函数的第一行开始执行,且一个工程中 main 函数有且只有一个 标准的 main 函数格式: int main() {return 0; } int 是类型,这里指的是 main 函数的返回类型 return…...
44、Spring Boot 详细讲义(一)
Spring Boot 详细讲义 目录 Spring Boot 简介Spring Boot 快速入门Spring Boot 核心功能Spring Boot 技术栈与集成Spring Boot 高级主题Spring Boot 项目实战Spring Boot 最佳实践总结 一、Spring Boot 简介 1. Spring Boot 概念和核心特点 1.1、什么是 Spring Boot&#…...
STM32硬件IIC+DMA驱动OLED显示——释放CPU资源,提升实时性
目录 前言 一、软件IIC与硬件IIC 1、软件IIC 2、硬件IIC 二、STM32CubeMX配置KEIL配置 三、OLED驱动示例 1、0.96寸OLED 2、OLED驱动程序 3、运用示例 4、效果展示 总结 前言 0.96寸OLED屏是一个很常见的显示模块,其驱动方式在用采IIC通讯时,常用软件IIC…...
Android 中绕过hwbinder 实现跨模块对audio 的HAL调用
需求 Audio 模块中专门为 TV 产品添加了一些代码,需要在 hdmi 的 HAL 代码中进行调用以完成某些功能。 解决方法 首先将 hdmi HAL 要调用的 audio 接口函数所在的 .so 链接到最基本的 lib.primay.amlogic.so 中(其它平台上这个 .so 文件的名字也可能是…...
基于单片机技术的手持式酒精检测电路设计
基于STC89C52单片机的酒精检测仪设计 目录 基于STC89C52单片机的酒精检测仪设计一、简介二、酒精测试仪总体方案设计2.1 酒精检测仪设计要求分析2.2 设计框图 三、硬件设计3.1 酒精检测电路3.2 模数转换电路3.3 STC89c52单片机电路3.4 LED显示电路3.5 声光报警电路3.6 按键和复…...
【车道线检测(0)】卷首语
车道线检测领域,早期的LaneNet、CondLaneNet等模型。现在在精度、实时性、复杂场景适应性等方面有了更多进展。 Head(输出头)的设计角度分类 在车道线检测任务中,Head(输出头)的设计角度直接影响模型的…...
记一次某网络安全比赛三阶段webserver应急响应解题过程
0X01 任务说明 0X02 靶机介绍 Webserver(Web服务器)是一种软件或硬件设备,用于接收、处理并响应来自客户端(如浏览器)的HTTP请求,提供网页、图片、视频等静态或动态内容,是互联网基础设施的核心…...
AI 越狱技术剖析:原理、影响与防范
一、AI 越狱技术概述 AI 越狱是指通过特定技术手段,绕过人工智能模型(尤其是大型语言模型)的安全防护机制,使其生成通常被禁止的内容。这种行为类似于传统计算机系统中的“越狱”,旨在突破模型的限制,以实…...
项目进度延误的十大原因及应对方案
项目进度延误主要源于以下十大原因:目标不明确、需求频繁变更、资源配置不足或不合理、沟通不畅、风险管理不足、缺乏有效的项目监控、技术难题未及时解决、团队协作效率低下、决策链过长、外部因素影响。其中,需求频繁变更是导致延误的关键因素之一&…...
瑞友客户端登录GS_ERP时,报错: 由于安全许可证服务器不能提供许可证,连接被中断的解决方法
瑞友客户端登录GS_ERP时,报错:由于安全许可证服务器不能提供许可证,连接被中断的解决方法 瑞友客户端登录GS_ERP时, 报错:由于安全许可证服务器不能提供许可证,连接被中断的解决方法是由于远程桌面连接协议…...
android wifi通过命令行打开2.4G热点
android系统支持2G和5G,但车机系统应用只支持5G,但是需要测试2.4G的射频 方法如下: 1、adb shell 进去,su 指定root权限,确保热点处于关闭状态 2、开启热点为www99999, 密码为12345678, wpa2的加密协议 cm…...
truncate,drop,delete分析
truncate,drop,delete对比分析 特性 TRUNCATE DROP DELETE **操作对象** 表中的所有数据 整个表及其所有数据 表中的特定数据 **是否保留表结构** 是 否 是 **是否可恢复** 不可恢复 不可恢复 可恢复 **性能** 高 高 低(逐行删除) …...
vue+flask图书知识图谱推荐系统
文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站,有好处! 编号: F025 架构: vueflaskneo4jmysql 亮点:协同过滤推荐算法知识图谱可视化 支持爬取图书数据,数据超过万条&am…...
什么是微前端?有什么好处?有哪一些方案?
微前端(Micro Frontends) 微前端是一种架构理念,借鉴了微服务的思想,将一个大型的前端应用拆分为多个独立、自治的子应用,每个子应用可以由不同团队、使用不同技术栈独立开发和部署,最终聚合为一个整体产品…...
prompts提示词经典模板
prompts.py 中的提示词模板详解 文件中定义了两个核心提示词模板:REASON_PROMPT 和 RELEVANT_EXTRACTION_PROMPT。这两个模板在 DeepResearcher 的推理过程中扮演着关键角色。下面我将详细解析这两个模板的结构和功能。 REASON_PROMPT 详解 REASON_PROMPT 是用于指…...
pytorch软件封装
封装代码,通过传入文件名,即可输出类别信息 上一章节,我们做了关于动物图像的分类,接下来我们把程序封装,然后进行预测。 单张图片的predict文件 predict.py 按着路径,导入单张图片做预测from torchvis…...
DAY02:【pytorch】计算图与动态图机制
一、引言 在深度学习框架中,计算图是理解自动求导和模型优化的核心概念。无论是PyTorch的动态图机制,还是TensorFlow早期的静态图模式,计算图都扮演着关键角色。本文将深入解析计算图的基本原理,并结合PyTorch代码演示动态图的运…...
基于元学习(Meta-Learning)的恶意流量检测
元学习(Meta-Learning),即“学会学习”(Learning to Learn),通过让模型从多个相关任务中提取通用知识,实现对新任务的快速适应。在恶意流量检测领域,元学习的核心价值在于从少量攻击样本中泛化出检测规则,尤其适用于新型攻击、定向APT攻击等数据稀缺场景。 一、元学习…...
JavaScript:游戏开发的利器
在近年来的科技迅速发展中,JavaScript 已逐渐成为游戏开发领域中最受欢迎的编程语言之一。它的跨平台特性、广泛的社区支持、丰富的库和框架使得开发者能够快速、有效地创建各种类型的游戏。本文将深入探讨 JavaScript 在游戏开发中的优势。 一、跨平台支持 JavaSc…...
玩转Docker | 使用Docker搭建pinry图片展示系统
玩转Docker | 使用Docker搭建pinry图片展示系统 前言一、Pinry介绍Pinry 简介Pinry 特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署pinry服务下载镜像创建容器检查容器状态检查服务端口安全设置四、访问pinry应用五、pinry基本使用5.1 注册pinry账号…...
DAPP实战篇:使用web3.js实现前端输入钱包地址查询该地址的USDT余额——前端篇
专栏:区块链入门到放弃查看目录-CSDN博客文章浏览阅读385次。为了方便查看将本专栏的所有内容列出目录,按照顺序查看即可。后续也会在此规划一下后续内容,因此如果遇到不能点击的,代表还没有更新。声明:文中所出观点大多数源于笔者多年开发经验所总结,如果你想要知道区块…...
企业信息化-系统架构师(九十八)
1在对一个软件系统进行设计与确认后,需要进行架构复审,架构复审目的标识潜在风险,及早发现架构的缺陷和漏洞,在架构复审过程中,主要由()决定架构满足需求,质量需求是否在设计中体现。…...
【C++算法】54.链表_合并 K 个升序链表
文章目录 题目链接:题目描述:解法C 算法代码: 题目链接: 23. 合并 K 个升序链表 题目描述: 解法 解法一:暴力解法 每个链表的平均长度为n,有k个链表,时间复杂度O(nk^2) 合并两个有序…...
阿里云CDN应对DDoS攻击策略
阿里云CDN遭遇DDoS攻击时,可通过以下综合措施进行应对,保障服务的稳定性和可用性: 1. 启用阿里云DDoS防护服务 阿里云提供专业的DDoS防护服务,通过流量清洗中心过滤恶意流量,确保合法请求正常传输。该服务支持按需选…...
MySQL8的索引跳跃扫描原理
#MySQL 8 的索引跳跃扫描(Index Skip Scan)原理 1. 什么是索引跳跃扫描?索引跳跃扫描(Index Skip Scan)是 MySQL 8.0.13 引入的一种优化技术,允许在某些情况下跳过联合索引的最左前缀字段,仍然…...
centos 启动nginx 服务器
✅ 如果你是通过 yum 安装的 Nginx(推荐方式): 🔹 启动 Nginx: sudo systemctl start nginx 🔹 设置开机自启(建议开启): sudo systemctl enable nginx ὓ…...
格式化输出
% 符号相关 数据类型代码 %s:字符串 示例:print("名字是 %s" % "Tom") → 名字是 Tom%c:字符/ASCII码 示例:print("%c" % 65) → A%d/%i:有符号整数 示例:print("年龄…...
[leetcode]动态规划:斐波那契数列
一.线性dp 1.0什么是线性dp 线性DP就是指状态的转移具有线性递推关系,每个状态只依赖之前的状态,按照线性顺序一步步递推下去。 1.1斐波那契数列问题 #include <iostream> #include <vector> using namespace std; int main() { in…...
HackMyVM - todd记录
HackMyVM - toddhttps://mp.weixin.qq.com/s/E_-hepdfY-0veilL1fl2QA...
【spark认任务提交】配置优先级顺序
配置优先级顺序 Spark-submit 命令行参数 (最高优先级)代码中通过 SparkConf 设置的参数 (在应用程序中直接设置)spark-defaults.conf 文件中的配置 实际应用中的建议 固定配置:将集群级别的默认配置放在 spark-defaults.conf 中应用特定配置:将应用特…...
如何建立高效的会议机制
建立高效的会议机制需做到:明确会议目标、制定并提前分发议程、控制会议时长、确保有效沟通与反馈、及时跟进执行情况。其中,明确会议目标是核心关键,它直接决定了会议的方向与效率。只有明确目标,会议才不会偏离初衷,…...
spark Core-RDD转换算子
1. map算子:对RDD中的数据逐条进行映射转换,可实现类型或值的转换。函数签名为 def map[U: ClassTag](f: T > U): RDD[U] 。 2. mapPartitions算子:以分区为单位处理数据,可进行任意处理。与 map 相比, map 是分区内…...
【图像处理】C++实现通用Raw图转Unpack14的高效方法
一、需求背景 在图像处理领域,我们经常需要处理各种位深的原始数据(如Raw8、Unpack10等)。某些高端相机或传感器会输出14位精度的图像数据,但受传输限制,实际存储时可能采用低位深打包。本文将实现一个通用转换函数&a…...
Vue3的Composition API与React Hooks有什么异同?
Vue3的一个重大更新点就是支持Composition API,而且也被业界称为hooks,那么Vue3的“Hooks”与React的Hooks有这么区别呢? 一、核心相似点 1. 逻辑复用与代码组织 都解决了传统类组件或选项式 API 中逻辑分散的问题,允许将相关逻…...
Gerrit的安装与使用说明(Ubuntu)
#本页面按192.168.60.148服务器举例进行安装配置 1.权限配置 ## 使用root或者有sudo权限用户执行 # 创建gerrit用户 sudo useradd gerrit # 设置gerrit用户的密码 sudo passwd gerrit # 增加sudo权限 sudo visudo 在root ALL(ALL:ALL) ALL行下添加如下内容 gerrit ALL(ALL:…...
如何在Git历史中抹掉中文信息并翻译成英文
如何在Git历史中抹掉中文信息并翻译成英文 在软件开发和版本控制领域,维护一个清晰、一致的代码历史记录是至关重要的。然而,有时我们可能会遇到需要修改历史提交的情况,比如删除敏感信息或修正错误。本文将详细探讨如何在Git历史中抹掉中文…...
Ubuntu利用docker将ONNX模型转换为RK3588模型
1.安装docker 下载教程 1.拉取镜像 方法一:通过命令拉取 # 下载官方Docker镜像sudo docker pull registry.cn-hangzhou.aliyuncs.com/rockchip/rknn-toolkit2:v2.3.0 方法二:通过rknn-toolkit2自带的直接安装 2.开始工作 创建工作目录并复制ONNX模型…...
Go:入门
文章目录 Hello, World命令行参数找出重复行GIF动画获取一个URL并发获取多个URL一个 Web 服务器其他 Hello, World Hello world package main import "fmt" func main() {fmt.Println("Hello, 世界") }package main表明这是一个可独立执行的程序包&#…...
深入理解 ResponseBodyAdvice 及其应用
ResponseBodyAdvice 是 Spring MVC 提供的一个强大接口,允许你在响应体被写入 HTTP 响应之前对其进行全局处理。 下面我将全面介绍它的工作原理、使用场景和最佳实践。 基本概念 接口定义 public interface ResponseBodyAdvice<T> {boolean supports(Metho…...
SpringBoot对接火山引擎大模型api实现图片识别与分析
文章目录 一、前言二、创建应用三、后端1.SDK集成2.调用Rest API 四、前端 一、前言 Spring AI实战初体验——实现可切换模型AI聊天助手-CSDN博客 如上,在上一篇博客,我们已经实现了spring ai对接本地大模型实现了聊天机器人,但是目前有个新…...
Java ---成员,局部变量与就近原则
成员变量 声明在类内部,但在方法、构造器或代码块之外的变量。 属于类的实例(对象)或类本身(静态变量)。 实例变量(非静态成员变量): public class Person {private String name…...
基于libevent写一个服务器(附带源码)
使用libevent搭建服务器 服务器源码二级目录 使用开源框架,目的是减少程序员对一些精细的操作的误操作,也是为了让程序员能更好的对接业务而不是底层api的使用。 为何使用libevent,因为libevent开源已经有十几年了,能很好的承受数…...
2.2.3 Spark Standalone集群
搭建Spark Standalone集群需要完成多个步骤。首先,配置主机名、IP地址映射、关闭防火墙和SeLinux,并设置免密登录。接着,配置JDK和Hadoop环境,并在所有节点上分发配置。然后,下载并安装Spark,配置环境变量和…...
每天记录一道Java面试题---day38
说说类加载器双亲委派模型 回答重点 AppClassLoader的父加载器是ExtClassLoader,ExtClassLoader的父加载器是BootStrapClassLoader。JVM在加载一个类时,会调用AppClassLoader的laodClass方法来加载这个类,不过在这个方法中,会先…...
[ctfshow web入门] web33
信息收集 相较于上一题,这题多了双引号的过滤。我猜测这一题的主要目的可能是为了不让使用$_GET[a]之类的语句,但是$_GET[a]也是一样的 没有括号可以使用include,没有引号可以使用$_GET 可以参考[ctfshow web入门] web32,其中的所…...
【时时三省】(C语言基础)用switch语句实现多分支选择结构
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 if语句只有两个分支可供选择,而实际问题中常常需要用到多分支的选择。例如,学生成绩分类(85分以上为A等,70 ~ 84分为B等,60 ~ 69分为C等)&…...