GameNetworkingSockets 中的 ed25519-donna:Ed25519 高性能签名与 Curve25519 密钥交换实战指南
通信游戏开发【免费下载链接】GameNetworkingSocketsReliable unreliable messages over UDP. Robust message fragmentation reassembly. P2P networking / NAT traversal. Encryption.项目地址https://gitcode.com/gh_mirrors/ga/GameNetworkingSockets点击查看免费下载本文围绕 GameNetworkingSockets 仓库内置的 ed25519-donna 移植代码展开系统讲解 Ed25519 椭圆曲线签名算法的高性能实现、编译选项、完整 API 用法与批量验证机制并结合仓库源码揭示其在 P2P 加密链路中的实际调用方式。读完本文你将掌握如何为 Ed25519 签名选择正确的哈希与随机数后端、如何在 32/64 位与 SSE2 平台编译以及如何在项目中使用密钥生成、签名、验签、批量验证和 Curve25519 公钥派生。Ed25519 与 ed25519-donna 是什么Ed25519 是一种椭圆曲线数字签名算法Elliptic Curve Digital Signature Algorithm由 Dan Bernstein、Niels Duif、Tanja Lange、Peter Schwabe 和 Bo-Yin Yang 共同设计。它基于 25519 曲线具有签名短64 字节、密钥短公钥 32 字节、私钥 32 字节、速度快且天然具备恒定时间执行等特性因此在现代加密通信中被广泛采用。ed25519-donna 是 Ed25519 算法的一套独立 C 实现本仓库将其作为第三方代码内置于 src/external/ed25519-donna/并在此基础上做了 Valve 风格的定制见ed25519_VALVE.c。该项目提供了高性能、可移植的 32 位与 64 位实现且所有实现对机密数据的处理都是恒定时间的constant time这意味着执行时间不随密钥或消息内容变化能有效抵抗时序侧信道攻击。在 GameNetworkingSockets 中这套代码被用于连接加密src/common/crypto_25519.h明确注释了它的用途——“Common base for x25519 and ed25519 public keys on the 25519 curve”即同时承担 Curve25519 密钥交换ECDH与 Ed25519 签名两类密码学原语为 UDP 上的可靠/不可靠消息与 P2P 握手提供身份认证和密钥协商能力。性能基准ed25519-donna 的核心卖点是性能。README 中的基准数据基于 gcc 4.6.3、icc 13.1.1、clang 3.4-1~exp1 编译单位是千周期k。批验证时间括号内是每 64 个签名一批时单个验证的平均耗时。E5200 2.5GHzmarchcore2实现SigngcciccclangVerifygcciccclanged25519-donna 64bit100k110k137k327k (144k)342k (163k)422k (194k)amd64-64-24k102k355k (158k)ed25519-donna-sse2 64bit108k111k116k353k (155k)345k (154k)360k (161k)amd64-51-32k116k380k (175k)ed25519-donna-sse2 32bit147k147k156k380k (178k)381k (173k)430k (192k)ed25519-donna 32bit597k335k380k1693k (720k)1052k (453k)1141k (493k)E3-1270 3.4GHzmarchcorei7-avx实现SigngcciccclangVerifygcciccclangamd64-64-24k68k225k (104k)ed25519-donna 64bit71k75k90k226k (105k)226k (112k)277k (125k)amd64-51-32k72k218k (107k)ed25519-donna-sse2 64bit79k82k92k252k (122k)259k (124k)282k (131k)ed25519-donna-sse2 32bit94k95k103k296k (146k)294k (137k)306k (147k)ed25519-donna 32bit525k299k316k1502k (645k)959k (418k)954k (416k)几点结论值得注意均为原 README 的说明64 位实现明显快于 32 位实现SSE2 版本在 64 位下与纯 C 的 64 位版本接近但在 32 位下提升显著。SSE2 性能在 AMD 及 SSE 指令较慢的老 CPU 上可能不那么亮眼。Visual Studio 下ge25519_scalarmult_base_niels的性能会略有滞后直到为其ge25519_scalarmult_base_choose_niels提供优化的汇编版本。README 亦注明SSE2 代码与基准尚未更新完毕。从源码看这些性能差异的根源在算术层仓库同时提供了 32 位与 64 位的 limb 运算实现curve25519-donna-32bit.h、curve25519-donna-64bit.h并在 ed25519-donna-32bit-sse2.h、ed25519-donna-64bit-sse2.h 等文件中以 SSE2 指令加速域运算。编译哈希与随机数后端的选择ed25519-donna 的编译非常灵活。如果你针对 OpenSSL 编译则无需任何配置哈希与随机数都默认使用 OpenSSL。Hash 选项Ed25519 内部需要 SHA-512 作为哈希原语。若不使用 OpenSSL则必须自行提供哈希函数选择逻辑见 ed25519-hash.h#if defined(ED25519_REFHASH) #include ed25519-hash-ref.h #elif defined(ED25519_CUSTOMHASH) #include ed25519-hash-custom.h #elif defined(ED25519_HASH_BCRYPT) #include ed25519-hash-bcrypt.h #else #include ed25519-openssl.h #endif-DED25519_REFHASH使用 SHA-512 的简单但较慢的参考实现ed25519-hash-ref.h。README 明确警告这只应在没有 OpenSSL 时用来验证代码能否工作生产环境不应使用。-DED25519_CUSTOMHASH接入自定义哈希。编译ed25519.c时加上该宏并把自定义实现放入ed25519-hash-custom.h。哈希必须具有 512 位摘要并实现以下接口struct ed25519_hash_context; void ed25519_hash_init(ed25519_hash_context *ctx); void ed25519_hash_update(ed25519_hash_context *ctx, const uint8_t *in, size_t inlen); void ed25519_hash_final(ed25519_hash_context *ctx, uint8_t *hash); void ed25519_hash(uint8_t *hash, const uint8_t *in, size_t inlen);-DED25519_HASH_BCRYPT接入 ed25519-hash-bcrypt.hWindows 上可利用 BCrypt 的 SHA-512。值得注意的是GameNetworkingSockets 的定制文件 ed25519_VALVE.c 在无 OpenSSL 环境下定义了ED25519_CUSTOMHASH并内联了一份来自公共领域 libTomCrypt 的 SHA-512 完整实现含 80 轮常数K[80]、sha512_init/process/done等通过宏包装成上述 ed25519 哈希接口从而在没有 OpenSSL 的平台上也能完整编译。Random 选项随机数仅用于批量验证为验证生成随机标量。若不用 OpenSSL则需要自行提供随机函数选择逻辑见 ed25519-randombytes.h-DED25519_CUSTOMRANDOM使用自定义随机函数。编译ed25519.c时加该宏并把实现放入ed25519-randombytes-custom.h必须实现void ED25519_FN(ed25519_randombytes_unsafe) (void *p, size_t len);-DED25519_TEST使用基于 Bob Jenkins ISAAC 算法的变体——确定性播种、非线程安全的 CSPRNG专用于确定性测试。默认情况直接使用 OpenSSL 的RAND_bytes#include openssl/rand.h。README 中也确认默认实现现在使用 OpenSSL 的RAND_bytes。GameNetworkingSockets 的定制版本在 ed25519_VALVE.c 顶部定义了ED25519_CUSTOMRNG并注释掉了原先 Windows/非 Windows 的ed25519_randombytes_unsafe实现含 Win32 的RtlGenRandom以及“其他平台直接令链接失败”的策略最终随机函数由项目自身提供。次要选项-DED25519_INLINE_ASM禁用自定义汇编例程改用可移植 C 代码。-DED25519_FORCE_32BIT即使在 64 位编译环境下也强制使用 32 位例程。32 位 / 64 位 / SSE2 编译命令# 32 位 gcc ed25519.c -m32 -O3 -c # 64 位 gcc ed25519.c -m64 -O3 -c # SSE232 位 gcc ed25519.c -m32 -O3 -c -DED25519_SSE2 -msse2 # SSE264 位 gcc ed25519.c -m64 -O3 -c -DED25519_SSE2clang 与 icc 同样受支持。ED25519_SSE2宏会启用 ed25519-donna-sse2.h 中的 SSE2 加速路径。API 使用指南使用方式很简单链接ed25519.o按-mbits位宽生成并在代码中#include ed25519.h若使用 OpenSSL还需-lssl -lcryptoREADME 提示有些系统可能不需要-lcrypto可能需要反复试验确认。密钥与签名数据结构ed25519.h 定义了四个类型全部是定长字节数组typedef unsigned char ed25519_signature[64]; /* 签名R(32) S(32) */ typedef unsigned char ed25519_public_key[32]; /* 公钥 */ typedef unsigned char ed25519_secret_key[32]; /* 私钥仅 32 字节 */ typedef unsigned char curved25519_key[32]; /* Curve25519 密钥 */函数声明均为extern CC 可直接使用void ed25519_publickey(const ed25519_secret_key sk, ed25519_public_key pk); int ed25519_sign_open(const unsigned char *m, size_t mlen, const ed25519_public_key pk, const ed25519_signature RS); void ed25519_sign(const unsigned char *m, size_t mlen, const ed25519_secret_key sk, const ed25519_public_key pk, ed25519_signature RS); int ed25519_sign_open_batch(const unsigned char **m, size_t *mlen, const unsigned char **pk, const unsigned char **RS, size_t num, int *valid); void ed25519_randombytes_unsafe(void *out, size_t count); void curved25519_scalarmult_basepoint(curved25519_key pk, const curved25519_key e);生成私钥私钥就是来自安全密码学随机源的32 个随机字节ed25519_secret_key sk; randombytes(sk, sizeof(ed25519_secret_key));生成公钥ed25519_public_key pk; ed25519_publickey(sk, pk);从 ed25519.c 的实现可以看出其数学本质先对私钥做哈希扩展并钳制ed25519_extskextsk[0] 248; extsk[31] 127; extsk[31] | 64;然后计算A aB基点多倍标量乘ge25519_scalarmult_base_niels最后打包为 32 字节公钥。签名签名需要同时提供私钥和公钥ed25519_signature sig; ed25519_sign(message, message_len, sk, pk, signature);对应实现流程ed25519.c计算r H(aExt[32..64], m)、R rB再计算S (r H(R,A,m)·a) mod L输出 64 字节R || S。验证签名int valid ed25519_sign_open(message, message_len, pk, signature) 0;验证实现ed25519.c会先做两个快速拒绝检查RS[63] 224非零则无效、公钥无法解包则无效随后计算hram H(R,A,m)用双标量乘ge25519_double_scalarmult_vartime验证R SB - H(R,A,m)A是否成立。批量验证批量验证可以显著摊薄成本。README 给出的示例将消息、长度、公钥、签名组织成数组并传入一个valid结果数组const unsigned char *mp[num] {message1, message2..}; size_t ml[num] {message_len1, message_len2..}; const unsigned char *pkp[num] {pk1, pk2..}; const unsigned char *sigp[num] {signature1, signature2..}; int valid[num]; /* valid[i] 将在单个签名有效时被置为 1否则为 0 */ int all_valid ed25519_sign_open_batch(mp, ml, pkp, sigp, num, valid) 0;其实现位于 ed25519-donna-batchverify.h单批最大 64 个签名#define max_batch_size 64使用 Bos–Carter 方法将多个验签合并为一次多点标量乘过程中用堆heap管理标量减法并通过ed25519_randombytes_unsafe为每个签名生成 128 位随机标量做随机组合。README 特别强调批量验证使用ed25519_randombytes_unsafe实现在ed25519-randombytes.h默认基于 OpenSSL 的RAND_bytes来生成随机标量。需要说明的仓库差异GameNetworkingSockets 的这份 ed25519-donna-batchverify.h 中ed25519_sign_open_batch函数体被注释掉了注释写着// VALVE Delete this. We dont need it, and we dont want to hook up the random number generator.——即 Valve 出于“不需要它、也不想接入随机数生成器”的原因移除了批量验证入口。因此本仓库的实际可用验证 API 以单签名ed25519_sign_open为主。与 SUPERCOP 版本的区别README 明确对比了与 SUPERCOP 版本的差异理解这些差异对正确使用 API 至关重要签名不追加在消息后面不要求消息后有 64 字节签名空间消息前面不需要填充no padding私钥不包含公钥副本因此只有32 字节SUPERCOP 版为 64 字节签名时必须显式传入公钥。顺带获得 Curve25519 公钥生成ed25519-donna 还提供了 Curve25519 公钥生成能力——得益于 Adam Langley 的方案直接复用 Ed25519 预计算的基点标量乘来实现curved25519_key sk, pk; randombytes(sk, sizeof(curved25519_key)); curved25519_scalarmult_basepoint(pk, sk);命名curved25519curve 与 ed25519 的组合是为了避免命名冲突。其性能略快于短消息的 ed25519 签名因为两者共用同一套标量乘代码。实现见 ed25519.c先对密钥钳制ec[0] 248; ec[31] 127; ec[31] | 64;再计算基点标量乘最后通过u (y z) / (z - y)从 Edwards 坐标转换为 Montgomery 形式的 x 坐标。这一能力正是 GameNetworkingSockets 最关键的复用点之一在 crypto_25519_donna.cpp 中可以看到项目在 Curve25519 公钥生成路径上特意放弃了curve25519_donna_basepoint转而使用curved25519_scalarmult_basepoint注释说明“Ed25519 codebase provides a faster version of curve25519_donna_basepoint”并断言“ed25519 方案中所有位都是有意义的”。也就是说网络层密钥交换用的 Curve25519 公钥派生实际跑在 ed25519-donna 的标量乘代码上。测试与验证基础测试与基准用-DED25519_TEST编译ed25519.c并与 test.c 链接即可运行基础健全性测试并对每个函数做基准test-batch.c已并入test.c。内部数学单元测试test-internals.c 是独立文件与ed25519.c相同方式构建。它用极值测试数学原语标量展开/收缩、模运算、基点乘等以确保其正确性并支持 SSE2。模糊测试fuzzing项目提供针对参考实现ref10的模糊测试详见 fuzz/README.md。fuzz/目录包含fuzz-curve25519.c、fuzz-ed25519.c、curve25519-ref10.c、ed25519-ref10.c以及 SSE2 版本用于将 ed25519-donna可选含 SSE2与 SUPERCOP 的 ref10 实现逐位对照。*nix 下的构建脚本为 PHP 脚本php build-nix.php --bits64 --functioned25519 --with-sse2 --compilericc必选参数--function[curve25519,ed25519]、--bits[32,64]可选参数--with-sse2同时模糊测试 SSE2 版、--with-openssl用 OpenSSL 的 SHA-512默认是慢速参考实现、--compiler[gcc,clang,icc]默认 gcc、--no-asm禁用平台汇编。如果各实现结果一致程序只间歇输出状态点每 0x1000 次通过与 64 位进度计数每 0x20000 次通过一旦 ed25519-donna 与 ref10 不一致会转储随机输入数据、ref10 输出以及差异对比便于定位回归。在 GameNetworkingSockets 中的实际落地最后把视角拉回项目本身。仓库的 25519 密码学封装集中在 src/common/crypto_25519.h 与 src/common/crypto_25519_donna.cppcrypto_25519.h定义了三类密钥对象CCryptoKeyBase系列的 25519 曲线公钥/私钥基类、Curve25519 密钥交换公钥封装、Ed25519 签名私钥封装并声明了Sign、VerifySignature、GenerateKeyPair、ComputeSharedSecret等接口。crypto_25519_donna.cpp直接包含 ed25519.h 与curve25519-donna/curve25519.h并通过CHOOSE_25519_IMPL宏在普通实现与_sse2后缀实现ed25519_publickey_sse2、ed25519_sign_sse2、ed25519_sign_open_sse2、curved25519_scalarmult_basepoint_sse2等之间按平台选择。签名流程Sign()调用CHOOSE_25519_IMPL(ed25519_sign)传入数据、长度、私钥原始数据与公钥VerifySignature()调用ed25519_sign_open并以返回 0 作为验证成功标志crypto_25519_donna.cpp。密钥交换流程ComputeSharedSecret()调用curve25519_donna完成 ECDH公钥派生则如前述复用curved25519_scalarmult_basepointcrypto_25519_donna.cpp。除此之外仓库还提供了 libsodium 与 OpenSSL 的等价实现crypto_25519_libsodium.cpp、crypto_25519_openssl.cpp它们与 donna 实现共享同一套上层接口说明 ed25519-donna 在这里是一个可替换的密码学后端。定制文件 ed25519_VALVE.c 则以#define ED25519_CUSTOMRNG 内联 SHA-512 的方式保证即便脱离 OpenSSL 也能完整构建 Ed25519 能力——这正是 UDP 加密与 P2P 握手场景下对可移植性与确定性最看重的部分。延伸阅读算法设计、安全性分析与安全实现建议的权威论文可访问 Ed25519 官方网站的论文页见原 README 的 Papers 一节。若希望继续深入本仓库的密码学封装建议阅读 crypto_25519.h、crypto_25519_donna.cpp 以及 test_pki.cppPKI/证书相关的签名验证测试。赞分享通信游戏开发【免费下载链接】GameNetworkingSocketsReliable unreliable messages over UDP. Robust message fragmentation reassembly. P2P networking / NAT traversal. Encryption.项目地址https://gitcode.com/gh_mirrors/ga/GameNetworkingSockets点击查看免费下载相关推荐cryptography 库 Ed25519 签名与验签实战指南基于 EdDSA 与 Curve25519 的 Python 实现cryptography 库 Ed25519 签名与验签实战指南基于 EdDSA 与 Curve25519 的 Python 实现 Ed25519 是 cry密码学electron-builder 密钥轮换实战Ed25519 更新清单签名与 Windows/macOS/Linux 代码签名证书的平滑过渡electron builder 密钥轮换实战Ed25519 更新清单签名与 Windows/macOS/Linux 代码签名证书的平滑过渡 导读 本文是一份构建工具桌面应用开发工具Operator SDK 发布签名 GPG 密钥管理实战密钥托管、轮换、签名与 CI 集成Operator SDK 发布签名 GPG 密钥管理实战密钥托管、轮换、签名与 CI 集成 Operator SDK 仓库使用 OpenPGPGPG密钥对云原生后端开发工具微服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

LoadRunner压测实战:如何精准定位CPU瓶颈与性能拐点

LoadRunner压测实战:如何精准定位CPU瓶颈与性能拐点

看到标题里的 LoaRunner,第一反应是你想问的应该是 LoadRunner。这个拼写在社区里经常被写歪,我这里统一按 LoadRunner 来写。开篇直接说结论:性能测试里,“CPU 瓶颈”是最容易被提到、也最容易误判的话题。很多团队一看到 CPU 用…

2026/10/10 6:22:53 阅读更多 →
单片机毕设项目:基于单片机的室内烟雾粉尘实时检测、WIFI 上传与自动排风装置设计 基于单片机的物联网型室内环境监测、远程配置与声光报警系统设计(030108)

单片机毕设项目:基于单片机的室内烟雾粉尘实时检测、WIFI 上传与自动排风装置设计 基于单片机的物联网型室内环境监测、远程配置与声光报警系统设计(030108)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/10 6:21:53 阅读更多 →
从Oracle到KingbaseES,一条KFS链路把我从熬夜对数里捞了出来

从Oracle到KingbaseES,一条KFS链路把我从熬夜对数里捞了出来

去年接了一个保险行业的迁移项目,源端是一套跑了快十年的Oracle,存储过程三百多个,表八千多张,核心业务一天24小时不能停。甲方最开始给的方案是用传统的导出导入工具做T1批量同步,我做了两天的数据一致性验证&#xf…

2026/10/10 6:21:53 阅读更多 →

最新新闻

Spring Boot个人博客系统设计与实现:从建模到答辩的完整指南

Spring Boot个人博客系统设计与实现:从建模到答辩的完整指南

帮学弟改毕设代码的时候,我最怕看到的不是报错堆栈,而是开头就写着“个人博客系统”的仓库。同一个选题在每年计算机毕业设计名单里几乎从不缺席,但拉开差距的从来不是选题本身,而是实现深度。有人在网上随便拉一套Spring Boot博客…

2026/10/10 8:18:49 阅读更多 →
“偷传代码”风波升级:企业发函要求 12 项答复,智谱要过哪几关?

“偷传代码”风波升级:企业发函要求 12 项答复,智谱要过哪几关?

“偷传代码”风波升级:企业发函要求 12 项答复,智谱要过哪几关? 【免费下载链接】ZCode ZCode 是 AI 编程工作台,提供桌面应用、浏览器界面和终端 Agent。本仓库包含客户端、后端服务、共享 UI,以及 Agent CLI 与运行时…

2026/10/10 8:18:49 阅读更多 →
FaceWinUnlock-Tauri注册表操作与核心组件部署原理:软件如何注入Windows登录界面

FaceWinUnlock-Tauri注册表操作与核心组件部署原理:软件如何注入Windows登录界面

FaceWinUnlock-Tauri注册表操作与核心组件部署原理:软件如何注入Windows登录界面 【免费下载链接】FaceWinUnlock-Tauri 一款基于 Tauri 框架开发的现代化 Windows 面容识别解锁增强软件。它通过自定义 Credential Provider (DLL) 注入 Windows 登录界面&#xff0c…

2026/10/10 8:18:49 阅读更多 →
C语言求5×5矩阵鞍点:定义、解法与常见错误全解析

C语言求5×5矩阵鞍点:定义、解法与常见错误全解析

1. 这一题到底在考什么:55矩阵鞍点的准确定义前两天在技术群里看到有人发了一道题,说是菜鸟教程C经典100例的练习52,用C语言算一个55矩阵的鞍点。发代码的人自己调了半天,输出要么是错的,要么什么都不输出。我扫了一眼…

2026/10/10 8:18:49 阅读更多 →
Sales CRM 的 SEO 架构:从 lib/seo.ts 到 robots、sitemap 与 llms.txt 的完整链路

Sales CRM 的 SEO 架构:从 lib/seo.ts 到 robots、sitemap 与 llms.txt 的完整链路

Sales CRM 的 SEO 架构:从 lib/seo.ts 到 robots、sitemap 与 llms.txt 的完整链路 【免费下载链接】sales-crm 项目地址: https://gitcode.com/gh_mirrors/sa/sales-crm Sales CRM 是一个基于 Next.js 16 React 19 构建的开源销售团队客户管道&#xff08…

2026/10/10 8:18:49 阅读更多 →
洛谷P1553数字反转升级版:字符串模拟题的零处理与边界陷阱

洛谷P1553数字反转升级版:字符串模拟题的零处理与边界陷阱

第一次看到 P1553“数字反转(升级版)”的时候,我心里想的是:这不就是之前那道数字反转加几个情况吗,无非多一个百分号、小数点、分数线,扫一遍字符串,反转一下,完事。等我真正动手写…

2026/10/10 8:17:48 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →