3DES加密算法源码实战指南:嵌入式与遗留系统集成避坑手册
简介本资源是一份完整的3DES三重数据加密算法C实现源码包面向密码学初学者、信息安全课程学习者及嵌入式/系统开发中需集成对称加密功能的工程师。代码严格遵循FIPS PUB 46-3与NIST SP 800-67标准完整支持三种密钥选项独立三密钥、K1K3双密钥、全等单密钥兼容模式并包含Base64编解码辅助模块便于密文传输与调试。压缩包共6个文件3个头文件.h 3个实现.cpp其中des.h与des.cpp封装基础DES轮函数与Feistel结构des3.h与des3.cpp实现EK3(DK2(EK1(·)))加密流程与对应解密逻辑3DES.cpp提供主调用接口与示例用法结构清晰、注释规范适合教学演示与工程复用。资源大小仅20KB轻量易集成已有1511人学习下载是理解块密码演进、掌握多层迭代加密机制及开展密码算法对比实验的优质实践材料。1. 3DES加密算法源码不是“过时古董”而是嵌入式设备与遗留系统里真正扛压的对称加密守门人你可能在教科书里见过它被标为“已不推荐”在新项目评审会上被一句“用AES吧”轻轻划掉——但某高校实验室维护的十年老工业数据采集终端、某国产PLC通信协议栈、某金融终端固件升级包签名验证模块至今仍在跑着未经修改的3DES源码。它没消失只是退到了更需要确定性、兼容性和可审计性的角落。3DESTriple Data Encryption Standard本质是用三次DES操作构建的块密码EDE模式Encrypt–Decrypt–Encrypt最常见密钥长度实际为168位三个独立56位DES密钥但因中间解密步骤引入的密钥相关性有效安全强度约112位。它不快、不省资源、不时髦但它足够透明C语言实现不到300行无依赖、无随机数生成器、无外部熵源连裸机环境都能静态编译进去。本文不讲理论推导只聚焦一线工程师拿到一个“3DES加密算法源码”压缩包后如何确认它是可用的、怎么集成进真实工程、哪些参数会悄悄让你的加解密结果对不上、以及为什么有时候“明明用了标准库却解不出原始数据”——那大概率不是算法错了是你漏看了那个隐藏在init函数里的字节序翻转逻辑。2. 从源码包到可运行demo三步定位核心文件与最小验证路径拿到一个名为3des_src_v1.2.zip或类似命名的压缩包别急着编译。先解压用find . -name *.c -o -name *.h | xargs ls -la快速扫一遍结构。真实项目中90%的3DES源码包都遵循极简组织一个头文件定义接口一到两个C文件实现核心逻辑最多再加一个测试用的main.c。下面这三类文件是必须盯住的“命脉”。2.1 头文件里藏着接口契约看懂des3_encrypt()和des3_decrypt()的参数语义绝大多数可靠源码包都会提供类似如下的头文件声明以常见开源风格为例// des3.h #ifndef DES3_H #define DES3_H #include stdint.h // 3DES支持三种密钥模式3KEYK1≠K2≠K3、2KEYK1K3、1KEYK1K2K3即等效DES typedef enum { DES3_MODE_3KEY 0, DES3_MODE_2KEY 1, DES3_MODE_1KEY 2 } des3_mode_t; // 初始化上下文关键决定密钥加载方式和字节序处理 int des3_init(uint8_t *key, size_t key_len, des3_mode_t mode, uint8_t *iv, int use_iv); // 加密输入明文8字节倍数输出密文返回实际写入字节数 int des3_encrypt(const uint8_t *plaintext, uint8_t *ciphertext, size_t len); // 解密输入密文8字节倍数输出明文返回实际写入字节数 int des3_decrypt(const uint8_t *ciphertext, uint8_t *plaintext, size_t len); // 清理上下文擦除内存中的密钥副本安全刚需 void des3_cleanup(void); #endif提示这里des3_init()的use_iv参数极易被忽略。若设为0算法默认使用ECB模式无IV纯块独立加密若设为1且传入了非NULL的iv指针则启用CBC模式。很多翻车案例就源于——测试向量用的是NIST CBC测试集但代码里use_iv传了0结果死活对不上。2.2 核心C文件验证确认是否实现标准EDE-CBC流程打开主实现文件常命名为des3.c或triple_des.c重点检查des3_encrypt()函数内部是否包含明确的三阶段调用链。以下是一个典型、可信任的EDE-CBC实现骨架简化版// des3.c节选 static uint8_t s_key1[8], s_key2[8], s_key3[8]; // 存储拆分后的三个DES密钥 static uint8_t s_iv[8]; // 当前IVCBC模式下会更新 static int s_use_iv 0; int des3_init(uint8_t *key, size_t key_len, des3_mode_t mode, uint8_t *iv, int use_iv) { if (key_len 16) return -1; // 至少支持2KEY模式16字节 // 密钥拆分逻辑关键不同源码包策略不同 switch(mode) { case DES3_MODE_3KEY: memcpy(s_key1, key, 8); memcpy(s_key2, key8, 8); memcpy(s_key3, key16, 8); break; case DES3_MODE_2KEY: memcpy(s_key1, key, 8); memcpy(s_key2, key8, 8); memcpy(s_key3, key, 8); // K3 K1 break; default: return -1; } s_use_iv use_iv; if (use_iv iv) memcpy(s_iv, iv, 8); return 0; } int des3_encrypt(const uint8_t *pt, uint8_t *ct, size_t len) { uint8_t block[8], prev_block[8]; size_t i; for (i 0; i len; i 8) { memcpy(block, pt i, 8); if (s_use_iv) { // CBC: 先与上一块密文或IV异或 if (i 0) { for (int j 0; j 8; j) block[j] ^ s_iv[j]; } else { for (int j 0; j 8; j) block[j] ^ prev_block[j]; } } // EDE: Encrypt with K1 - Decrypt with K2 - Encrypt with K3 des_encrypt(block, s_key1); // 第一次DES加密 des_decrypt(block, s_key2); // 第二次DES解密注意是DES解密函数 des_encrypt(block, s_key3); // 第三次DES加密 memcpy(ct i, block, 8); memcpy(prev_block, block, 8); // 保存当前密文块用于下一轮CBC } return (int)len; }逻辑说明这段代码清晰体现了EDE核心——des_encrypt()和des_decrypt()必须是两个独立、正确实现的DES基础函数。很多“伪3DES”源码包只提供一个des_process()靠传参区分加/解极易出错。此处必须看到明确的三次调用且第二次是des_decrypt。参数说明key_len是输入密钥总长度。3KEY需24字节168位2KEY需16字节112位1KEY需8字节56位。传入长度必须严格匹配mode否则密钥拆分越界。2.3 用NIST官方测试向量做最小闭环验证别信README里的“已通过测试”。直接拿NIST SP 800-20附录C的公开向量验证。例如2KEY-CBC模式下最常用的一组Key:0123456789ABCDEF01234567, IV:1234567890ABCDEF, Plaintext:0000000000000000→ Ciphertext:D2A1F101D2A1F101# 假设你已编译出 test_des3 可执行文件 $ echo -n 0000000000000000 | xxd -r -p | ./test_des3 encrypt \ -k 0123456789ABCDEF01234567 \ -m 2KEY \ -iv 1234567890ABCDEF \ | xxd -p d2a1f101d2a1f101关键动作这个命令背后你的test_des3程序必须完成1将十六进制密钥字符串解析为24字节二进制2按2KEY模式拆分为K1前8字节、K2中间8字节、K3前8字节3将IV字符串解析为8字节4调用des3_init(..., DES3_MODE_2KEY, iv_ptr, 1)5调用des3_encrypt()。任何一步解析错误结果必错。这是检验源码包是否“开箱即用”的黄金标准。3. 密钥管理与模式选择3DES不是“套上密钥就能用”而是三把锁的协同开闭3DES的“三重”特性让它比单DES复杂得多——密钥不是一股脑塞进去而是一组需要精确配置的钥匙组合。选错模式轻则加解密失败重则暴露弱密钥风险。3.1 三种密钥模式的本质区别与适用场景模式密钥长度实际密钥关系安全强度典型使用场景风险点3KEY24字节K1 ≠ K2 ≠ K3~112位高安全要求的新系统、金融报文密钥存储开销最大2KEY16字节K1 K3 ≠ K2~112位兼容旧系统、多数硬件加速模块支持若K1K2K3退化为DES1KEY8字节K1 K2 K3~56位纯兼容性测试、教学演示等同于DES严禁生产使用血泪经验某次对接某国产电表协议对方文档写“支持3DES”但实际只传16字节密钥。我们按3KEY初始化结果密钥拆分后K3取到乱码内存加解密全错。后来发现协议栈底层强制按2KEY模式硬编码必须传16字节并显式指定DES3_MODE_2KEY。永远以通信方的实际密钥长度和文档小字备注为准别信大标题。3.2 IV初始向量不是可选参数而是CBC模式的呼吸节奏ECB模式无IV像把长文本切成豆腐块单独加密相同明文块永远产出相同密文块极易被模式分析攻击。CBC模式通过IV让每个块加密结果依赖前一块是实际工程唯一可接受的模式。但IV的使用有严苛规则IV必须随机且不可预测每次加密新消息必须用密码学安全的随机数生成器产生新IV如Linux的getrandom()或/dev/urandom。绝不能复用、绝不能固定如全零IV。IV必须和密文一起传输接收方解密时需要同样的IV。通常做法是将IV作为密文前8字节拼接发送[IV][CIPHERTEXT]接收方先取前8字节作IV剩余部分解密。IV不需要保密但必须完整性保护如果IV被篡改解密后首块明文全乱后续块也可能错。因此IV应参与MAC计算如HMAC-SHA256或整个密文IV一起加密。// 正确的CBC加密封装示例生产环境 int encrypt_with_iv(uint8_t *key, size_t key_len, const uint8_t *plaintext, size_t pt_len, uint8_t *output_buffer, size_t *out_len) { uint8_t iv[8]; // 1. 安全生成IV if (get_random_bytes(iv, 8) ! 0) return -1; // 2. 初始化3DES启用IV if (des3_init(key, key_len, DES3_MODE_2KEY, iv, 1) ! 0) return -1; // 3. 将IV写入输出缓冲区头部 memcpy(output_buffer, iv, 8); // 4. 对明文进行PKCS#7填充确保长度为8倍数 uint8_t padded_pt[1024]; size_t padded_len pkcs7_pad(plaintext, pt_len, padded_pt, sizeof(padded_pt)); if (padded_len 0) return -1; // 5. 加密填充后数据结果写入output_buffer8 int enc_len des3_encrypt(padded_pt, output_buffer 8, padded_len); if (enc_len 0) return -1; *out_len 8 (size_t)enc_len; // IV ciphertext return 0; }参数说明pkcs7_pad()是必须的填充函数。3DES是8字节块密码输入长度必须是8的倍数。PKCS#7标准规定若需填充N字节则每字节值均为N。例如明文长10字节需填6字节0x06。没有填充des3_encrypt()对非8倍数长度的输入行为未定义多数源码包会直接截断或崩溃。4. 避坑指南那些让3DES加解密“对不上”的5个隐蔽雷区注意以下问题均来自真实项目调试现场非理论假设。每个都曾导致连续8小时以上的无效排查。4.1 现象用同一份密钥和IVC语言加密结果 vs Python的pycryptodome解密结果不一致原因字节序Endianness处理差异。某些3DES源码包尤其面向嵌入式MCU的在DES核心轮函数中对64位数据块做了主机字节序到网络字节序的转换如htonll()而Python库默认按小端处理。解决检查源码中des_encrypt()入口处是否有类似block_be htobe64(*(uint64_t*)block)的转换。若有你的明文输入必须是大端序字节流若无则保持小端。统一用xxd -p查看二进制确认输入数据字节排列。4.2 现象解密后明文末尾出现乱码如...hello\x05\x05\x05\x05\x05原因PKCS#7填充未正确移除。des3_decrypt()只负责解密不自动去填充。你必须在解密后手动解析最后1字节的值N然后砍掉末尾N字节。解决解密后添加uint8_t *decrypted malloc(dec_len); des3_decrypt(cipher, decrypted, dec_len); int pad_len decrypted[dec_len - 1]; // 最后一字节即填充长度 if (pad_len 0 pad_len 8) { memmove(decrypted, decrypted, dec_len - pad_len); }4.3 现象des3_init()返回0但后续加解密全返回负值原因密钥长度与mode参数不匹配。例如传入24字节密钥却指定DES3_MODE_2KEY源码包内部密钥拆分时访问key16越界触发内存保护异常ARM Cortex-M系列常见。解决严格校验——mode2KEY时key_len必须为16mode3KEY时必须为24。在des3_init()开头加断言assert((modeDES3_MODE_2KEY key_len16) || (modeDES3_MODE_3KEY key_len24));4.4 现象多线程环境下两个线程同时调用des3_encrypt()结果偶尔错乱原因源码包使用全局静态变量如s_key1[],s_iv[]存储上下文非线程安全。解决1加互斥锁简单粗暴2重构为上下文指针模式推荐typedef struct { uint8_t key1[8], key2[8], key3[8], iv[8]; int use_iv; } des3_ctx_t; int des3_init_ctx(des3_ctx_t *ctx, ...); // 所有操作传ctx指针切记不要在中断服务程序ISR中调用3DES其运算耗时长且可能阻塞。4.5 现象硬件加速模块如STM32 Crypto处理器的3DES结果与软件源码不一致原因硬件模块默认实现的是DES-ECB三轮串联而非标准3DES-EDE-CBC。它把三次DES当作独立操作缺少中间的“Decrypt with K2”环节。解决查阅芯片手册确认其3DES模式是否支持EDE。若仅支持EEEEncrypt-Encrypt-Encrypt则必须用软件模拟EDE先用硬件加密K1再用软件DES解密K2再用硬件加密K3。硬件加速不等于开箱即用必须核对模式字。5. 生产环境加固从“能跑通”到“可审计、抗侧信道、防故障”的四步落地写完des3_encrypt()能输出正确密文只是万里长征第一步。在真实产品中3DES模块要经受住代码审计、功耗分析、长期运行稳定性三重考验。以下是我在多个工业固件项目中沉淀的四步加固法。5.1 内存安全密钥绝不驻留于可读写RAM必须进OTP或专用密钥寄存器明文密钥是最高危资产。任何uint8_t key[24]定义在.data段的代码都是审计红线。正确做法首选OTPOne-Time Programmable在芯片烧录阶段将密钥写入OTP区域如STM32L5的TZSC保护的OTP启动时由ROM code加密加载到CPU密钥寄存器。次选专用密钥寄存器如NXP i.MX RT系列的OCOTP或SNVS模块提供硬件密钥槽软件只能触发加密指令无法读出密钥值。软件兜底若无硬件支持至少用mlock()锁定密钥内存页防止swap并在des3_cleanup()中用memset_s()C11或explicit_bzero()glibc彻底覆写。// 密钥加载安全范式 static uint8_t s_encrypted_key[32]; // 存储用设备唯一ID加密后的密钥密文 static uint8_t s_key_buf[24]; // 运行时解密缓冲区mlockd int load_secure_key(void) { if (mlock(s_key_buf, sizeof(s_key_buf)) ! 0) return -1; // 1. 读取OTP中设备唯一ID uint8_t uid[16]; read_device_uid(uid); // 2. 用UID AES解密s_encrypted_key - s_key_buf aes_decrypt_with_uid(s_encrypted_key, s_key_buf, uid); return 0; }5.2 抗侧信道消除3DES轮函数中的数据依赖分支与内存访问偏移标准DES轮函数中S盒查表和P置换常含if (bit1)分支及table[index]访问易被功耗分析SPA/DPA提取密钥。加固要点查表替换为算术运算用位运算替代S盒数组访问。例如S1盒可完全用((x4)0xf)^((x0xf)2)等组合表达需查DES标准S盒真值表推导。恒定时间比较所有密钥比较、状态校验用memcmp_s()或自定义time_const_cmp()避免短路。内存访问地址恒定轮函数中所有数组索引必须是编译期常量或与密钥无关的循环变量禁用key[i]类动态索引。5.3 故障注入防护在关键轮次插入校验让故障攻击失效攻击者可通过电压毛刺、激光照射使CPU跳过某轮DES计算导致密钥泄露。防御方案是在EDE流程中插入冗余校验// 在des_encrypt()的EDE三阶段间加入 des_encrypt(block, s_key1); // 插入校验对block做轻量哈希如CRC8与预存值比对 if (crc8(block, 8) ! EXPECTED_CRC1) goto fault_handler; des_decrypt(block, s_key2); if (crc8(block, 8) ! EXPECTED_CRC2) goto fault_handler; des_encrypt(block, s_key3);原理两次CRC校验值由密钥和轮次决定攻击者无法预知。一旦某轮被跳过CRC必错立即触发fault_handler()如复位、清空密钥、上报日志。5.4 可审计性所有3DES调用点必须打日志且日志含上下文哈希审计不是为了抓bug而是证明“我确实用了正确的密钥和模式”。在每个des3_init()调用后记录调用位置__FILE__ : STRINGIFY(__LINE__)密钥长度与模式key_len24, mode3KEYIV的SHA256哈希不记IV明文当前时间戳RTC// 审计日志宏 #define LOG_DES3_INIT(key_len, mode, iv) do { \ char iv_hash[65]; \ sha256_hash((char*)iv, 8, iv_hash); \ log_info(DES3_INIT:%s:%d key_len%zu mode%d iv_hash%s, \ __FILE__, __LINE__, key_len, mode, iv_hash); \ } while(0) // 使用 LOG_DES3_INIT(key_len, mode, iv); des3_init(key, key_len, mode, iv, 1);我的习惯在项目启动时用log_info(DES3_VERSION: %s, GIT_COMMIT_HASH)打上源码版本。当客户说“你们的加密有问题”我能立刻确认他用的是哪个commit而不是陷入“你改过哪行”的扯皮。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

2026企业微信收费标准,企业认证及增值功能价格解读

2026企业微信收费标准,企业认证及增值功能价格解读

摘要:企业微信的基础通讯、考勤及审批等核心办公能力均向用户开放,无需支付费用。企业的实际支出主要集中在主体认证及各类高级增值服务上。本文结合2026年最新产品资料,深度解析认证规则、增值服务体系及行业落地案例,协助不同规模的组织精准区分基础权益与付费项目,理性评估数…

2026/10/15 19:40:35 阅读更多 →
嵌入式系统实现Printf函数

嵌入式系统实现Printf函数

void dbg_printf(const char *fmt, ...) {char buf[128];va_list ap;int len;va_start(ap, fmt);len vsnprintf(buf, sizeof(buf), fmt, ap);va_end(ap);if (len > 0) {if (len > (int)sizeof(buf) - 1) {len sizeof(buf) - 1; // 截断}// while(CDC_Transmit_FS((uin…

2026/10/15 19:40:35 阅读更多 →
装了5个AI编程工具的人,该认识Magpie了

装了5个AI编程工具的人,该认识Magpie了

大家好,我是邵奈一,一个爱折腾的实战派技术博主。 文章对你有帮助是我的荣幸,欢迎评论区交流。0x00 概述:五个 Agent,五份配置 电脑上装着 Claude Code、Codex、Gemini CLI、OpenCode、Pi 这类命令行 Agent 的人&#…

2026/10/15 19:40:35 阅读更多 →

最新新闻

Path of Building 实操:PoB 离线构建规划器与伤害计算完整上手

Path of Building 实操:PoB 离线构建规划器与伤害计算完整上手

Path of Building 实操:PoB 离线构建规划器与伤害计算完整上手 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 规划一个 PoE 角色,往往卡在装备迭…

2026/10/15 20:27:02 阅读更多 →
耦合电容选型实战:隔直通交、转折频率与材质权衡

耦合电容选型实战:隔直通交、转折频率与材质权衡

1. 耦合电容的核心任务:隔直通交背后的真实电路需求1.1 为什么放大器不能简单粗暴地直接级联先说一个很多人第一次画多级放大电路时都会踩的场景:前级用共射极放大,集电极静态电位算出来大概是8V左右,后级打算用另一个共射级&…

2026/10/15 20:27:02 阅读更多 →
论文数据分析总被批不严谨,科迅捷AI帮你按五个层次自查

论文数据分析总被批不严谨,科迅捷AI帮你按五个层次自查

研究生论文的数据分析,导师批起来最常见的评语是不严谨。不严谨不是指算错,而是指没说清楚怎么分析、为什么这么分析。数据分析可以按五个层次自查,每一层都有明确的检查点。 第一层,数据质量。原始数据有没有缺失值?…

2026/10/15 20:27:02 阅读更多 →
ESP8266让3D打印机无线化:串口透传、远程控制与自动断电实战

ESP8266让3D打印机无线化:串口透传、远程控制与自动断电实战

3D 打印机用 USB 线连电脑,或者反复拔插 SD 卡,几乎是每个玩打印的人都要经历的事。尤其打一个十几小时的大件,人不可能一直守在机器旁边,夜里想瞄一眼温度、看它有没有翘边、会不会堵头,都没办法。给打印机加一块 ESP…

2026/10/15 20:27:02 阅读更多 →
MySQL核心知识全解析:从InnoDB索引到主从复制与性能优化

MySQL核心知识全解析:从InnoDB索引到主从复制与性能优化

1. 为什么到现在还在用MySQL——它不是最酷的,但它是扛事的先说结论:MySQL不是数据库里性能最强的,也不是功能最丰富的,但在绝大多数业务场景下,它依然是那个“最不操心的选择”。我见过不少团队,早期为了追…

2026/10/15 20:27:02 阅读更多 →
JMeter 5.6.2压力测试实战:从线程组到报告解读

JMeter 5.6.2压力测试实战:从线程组到报告解读

简介:Apache JMeter 5.6.2 是由 Apache 组织维护的开源纯 Java 压力测试工具,具备跨平台特性,可运行于 Windows、Linux、macOS。其用途在于模拟大量用户并发访问,评估 Web 应用、数据库、FTP 服务器等静态与动态资源的高并发稳定性…

2026/10/15 20:26:01 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →