Java解密报错BadPaddingException:原因、解决与排查指南
“Given final block not properly padded”看到这行报错做过Java加解密的同行一定不陌生。这个异常属于javax.crypto.BadPaddingException几乎九成出现在DES或AES的对称解密环节剩下的一成出现在你尝试去解别人的密文时。我第一次遇到它是在一个老系统的接口联调中对方传过来的密文我这边一解就抛异常翻来覆去检查密钥、检查编码折腾了大半天最后才发现是两边的填充模式没对齐。今天把这个问题从原理到方案一次讲透附上可以直接复制的代码和排查清单以后再遇到这个异常不用再一头扎进搜索引擎。1. 先搞清楚这个报错到底在说什么1.1 什么场景下会触发这个异常先把典型现场摆出来你看看自己踩过哪几个。场景一加密用的Cipher对象是Cipher.getInstance(DES)解密用的却是Cipher.getInstance(DES/ECB/PKCS5Padding)。加密侧默认走PKCS5Padding补位解密侧虽然也指定了PKCS5Padding看起来一致但我在项目X里真见过加密写成DES/ECB/PKCS5Padding、解密写成DES/ECB/NoPadding的组合结果就是隔三差五抛这个异常。场景二两个服务之间传密文A服务用DES/CBC/PKCS5Padding加密B服务用DES/ECB/PKCS5Padding解密。模式不一致解密出来是错误字节流最后一个分组的填充字节校验失败异常直接冒出。这种情况在微服务改造、多团队联调时特别常见。场景三密钥是个字符串比如password加密时用key.getBytes()得到8个字节解密时却用key.getBytes(UTF-8)。如果平台默认字符集跟UTF-8不一致或者密钥字符串里混进了中文字节数就不是8字节了。DES密钥必须是8字节字节数量不对生成的密钥就不合法解密失败是必然的。场景四CBC模式下加密时用了向量IV解密时没传IV或者传了不同的IV。并非每次都会立刻报填充异常但只要IV不一致导致最后一块数据被解错BadPaddingException就会冒出来。1.2 异常信息拆解什么是“填充”看异常本身翻译过来就是“给定的最后一块没有被正确填充”。要理解这句话得先知道DES是分组密码。DES的块大小是8字节。加密时它把明文切成若干个8字节小块一块一块处理。问题来了业务中的明文长度几乎不可能刚好是8的倍数。比如明文是“hello”只有5个字节最后一块缺3个字节怎么加密答案就是填充英文padding。Java里最常用的是PKCS5Padding它的规则很简单缺几个字节就补几个几。缺3个字节就补3个0x03缺5个字节补5个0x05如果最后一块恰好8字节那就在后面额外补一整块8个0x08。解密的时候程序先解开密文拿到字节流再根据最后一个字节的值n从末尾取出n个字节检查是否都等于n。如果对得上就移除填充还原原始明文如果对不上直接抛BadPaddingException。注意这个异常出现说明解密逻辑本身是跑通的但解出来的最后一块数据在移除填充时校验失败。换句话说密钥、模式或数据其中必有一样出了问题。2. 为什么加解密代码看着没问题解密还是报错2.1 分组密码、ECB与CBC的工作方式很多同学对DES的理解只停留在“调用一个方法传入密钥输出密文”这不足以排查问题。得知道底层发生了什么。DES处理的基本单位是块每次加密8字节明文输出8字节密文。如果明文长度不是8的倍数就必须先填充到8的倍数再分块加密。这是分组密码的共性约束。ECB模式是最朴素的分组方式每个8字节块独立加密块与块之间毫无关联。好处是实现简单、效率高坏处是相同明文块会得到相同密文块数据规律会暴露。早期协议用得多现在基本不推荐。CBC模式则复杂一步后一个明文块要先跟前一个密文块做异或再交给DES加密。第一块没有前一个密文可用就需要一个外部输入的初始向量IV。这样设计的好处是相同明文在不同位置会产生不同的密文数据规律被隐藏。代价是加密和解密的IV必须完全一致且解密必须按块链式推进。填充是为了让输入长度变成块大小的整数倍。ECB和CBC都需要填充但CBC因为有了IV和块链某个中间块出错会影响后续所有块。2.2 填充校验失败的真实原因清单我把自己在实战里排查过的原因整理成一张表基本上这个异常的根因都逃不出下面这几类。原因类型具体表现为什么导致填充校验失败密钥不一致加密用密钥A解密用密钥B密钥不同解密得到错误明文最后一块填充值随机模式不一致加密CBC解密ECB或反之分块方式不同最后一块内容完全不同填充不一致加密PKCS5Padding解密NoPadding解密不按规则解除填充校验逻辑失配IV不一致CBC模式下加解密IV不同IV影响解密结果最后一块解出来是错的密钥字节数错误密钥字符串转字节后不是8字节生成的DES密钥不符合规范解密结果错乱编码不一致明文用平台默认编码解密后用其他编码字节内容不同可能影响填充判断密文被截断或污染网络传输丢字节、Base64解码出错密文不是原始密文最后一块必然解错错误使用SecretKeySpec传入不可靠来源的字节数组生成的密钥与预期不符解密结果必然出错这里最坑的一点是很多异常看起来都像“算法没配对”实际上却是密钥传错或密文被改动。下面我会逐个给出解法。3. 解决方案从最简单的修复到规范的写法3.1 方案一加解密两侧必须显式指定算法、模式、填充最省事的修复是把Cipher.getInstance(DES)这种简写彻底丢掉改成完整的三段式写法Cipher cipher Cipher.getInstance(DES/ECB/PKCS5Padding);字符串分三段算法DES、模式ECB、填充PKCS5Padding。三段缺一不可。缺了模式或填充JCE会走默认配置。不同JDK版本、不同厂商提供的JCE实现对默认配置的解析可能有细微差异这就会导致“测试环境好好的一上生产就报错”的诡异现象。我建议在工程里把转换字符串定义成常量加解密统一引用public static final String DES_CBC_PKCS5 DES/CBC/PKCS5Padding; private static final String DES_ECB_PKCS5 DES/ECB/PKCS5Padding;这样有两个好处一是加解密不可能写岔二是将来换成AES只改常量定义处即可。这个看似简单的小改动能消掉一大半填充异常。3.2 方案二CBC模式下必须认真管理IV如果你的项目用了CBC模式IvParameterSpec绕不开。加解密两侧必须使用完全相同的IV字节。很多代码图省事把IV写成一个固定8字节数组类似于new byte[]{0,0,0,0,0,0,0,0}这在安全性上有明显隐患但至少加解密一致不会报错。规范一点的做法是加密时随机生成IV把IV拼接在密文前面一起输出解密时从密文中取出前8字节作为IV再解密后面的部分。核心代码如下// 加密 byte[] ivBytes SecureRandom.getInstance(SHA1PRNG).generateSeed(8); IvParameterSpec iv new IvParameterSpec(ivBytes); cipher.init(Cipher.ENCRYPT_MODE, key, iv); byte[] encrypted cipher.doFinal(plainBytes); byte[] result join(ivBytes, encrypted); // IV在前密文在后 // 解密 byte[] ivBytes Arrays.copyOfRange(data, 0, 8); byte[] cipherBytes Arrays.copyOfRange(data, 8, data.length); cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(ivBytes)); byte[] plain cipher.doFinal(cipherBytes);这种设计有两点很实用第一每次加密使用的IV都不同相同明文在不同时刻加密出的密文完全不同安全性更高第二解密方不需要额外去数据库或配置文件里查IV因为IV就跟着密文一块儿走。要注意的是IV不需要保密但必须保证完整性如果IV被篡改第一块解密就会失败后面的块也全乱。3.3 方案三处理密钥字节数和编码的坑DES密钥长度必须是8字节。很多人从配置中心拿一个字符串直接key.getBytes()转字节数组来构造SecretKeySpec这里藏着很大的隐患平台默认字符集不确定同一个字符串在不同机器上可能得到不同字节数。正确做法是显式指定字符集并做长度校验byte[] keyBytes mySecretKey.getBytes(StandardCharsets.UTF_8); if (keyBytes.length ! 8) { // 处理长度不足或超长的情况 }我实际遇到过这样一个问题某同事把密钥字符串写成了8个中文字符getBytes(UTF-8)之后变成24个字节SecretKeySpec并没有拒绝反而悄悄取用了前8个字节。密钥已经不是他以为的那个密钥了解密时加解密两边拿到的密钥其实都一样本该能解通但只要密钥配置在别处又做了一次编码转换立刻就会出填充异常。更稳妥的写法是用摘要算法把任意长度的密钥字符串归一化成8字节MessageDigest md MessageDigest.getInstance(MD5); byte[] digest md.digest(keyStr.getBytes(StandardCharsets.UTF_8)); byte[] keyBytes Arrays.copyOf(digest, 8); DESKeySpec dks new DESKeySpec(keyBytes); SecretKeyFactory kf SecretKeyFactory.getInstance(DES); SecretKey key kf.generateSecret(dks);这样做的好处非常明显不管用户输入的密钥是“abc”还是“这是一串很长的密钥字符串”最后都能映射成固定8字节消除长度错误这一大问题。代价是密钥空间被约束到了MD5结果的前8字节但考虑到本来就在用DES这种老算法这个取舍在兼容性优先的项目里是可接受的。3.4 方案四有条件就换AES或GCM从根上绕开填充校验说句实在话新项目还在用DES的场景已经非常少了。如果你没有历史存量数据的包袱我强烈建议直接上AES。AES块大小16字节密钥支持128、192、256位安全性远胜DES。如果想把“填充校验失败”这个排查点彻底绕开还有一个思路使用AEAD模式的AES/GCM/NoPadding。GCM模式自带认证标签解密时会做完整性校验密钥不一致或密文被篡改它抛的是AEADBadTagException异常信息直接指向“认证标签不匹配”比BadPaddingException更容易定位。而且GCM不需要单独组装MAC更简洁。不过老系统改造必须谨慎。如果已经用DES加密过一批评分数据直接切到AES会导致存量密文全部解不开。这种场景要做双算法兼容密文里带一个算法版本标识新增数据用新算法存量数据走旧逻辑直到把旧数据全部迁移完成再下线DES。提示判断自己要不要做双算法兼容先看数据库中是否存在用旧算法生成的密文。如果有绝不要立刻删掉旧解密代码。4. 完整实操一个可直接复用的DES加解密工具类4.1 工具类代码与详细说明下面这个类是我从某个老项目的公共模块里整理出来的支持CBC模式、Base64输出密钥长度问题用MD5归一化解决。你复制过去改一下密钥参数就能用。import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.IvParameterSpec; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.SecureRandom; import java.util.Arrays; import java.util.Base64; public class DesUtil { private static final String TRANSFORMATION_CBC DES/CBC/PKCS5Padding; private static SecretKey buildKey(String keyStr) throws Exception { MessageDigest md MessageDigest.getInstance(MD5); byte[] digest md.digest(keyStr.getBytes(StandardCharsets.UTF_8)); byte[] keyBytes Arrays.copyOf(digest, 8); DESKeySpec dks new DESKeySpec(keyBytes); SecretKeyFactory kf SecretKeyFactory.getInstance(DES); return kf.generateSecret(dks); } public static String encrypt(String plainText, String keyStr, byte[] ivBytes) throws Exception { SecretKey key buildKey(keyStr); Cipher cipher Cipher.getInstance(TRANSFORMATION_CBC); if (ivBytes ! null) { cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(ivBytes)); } else { cipher.init(Cipher.ENCRYPT_MODE, key); } byte[] encrypted cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8)); return Base64.getEncoder().encodeToString(encrypted); } public static String decrypt(String cipherText, String keyStr, byte[] ivBytes) throws Exception { SecretKey key buildKey(keyStr); Cipher cipher Cipher.getInstance(TRANSFORMATION_CBC); if (ivBytes ! null) { cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(ivBytes)); } else { cipher.init(Cipher.DECRYPT_MODE, key); } byte[] decoded Base64.getDecoder().decode(cipherText); byte[] plainBytes cipher.doFinal(decoded); return new String(plainBytes, StandardCharsets.UTF_8); } public static void main(String[] args) throws Exception { String key mySecretKey; String plain hello des, 这是测试中文内容正好需要填充; byte[] iv SecureRandom.getInstance(SHA1PRNG).generateSeed(8); String encrypted encrypt(plain, key, iv); System.out.println(密文: encrypted); String decrypted decrypt(encrypted, key, iv); System.out.println(明文: decrypted); System.out.println(校验结果: plain.equals(decrypted)); } }4.2 运行验证与分支讲解这段代码运行后的输出大致是这样密文: XmPqW8G0TmluXVcQrf1jEyJvnMFkuWhxSM4CzTsMzdg 明文: hello des, 这是测试中文内容正好需要填充 校验结果: true代码里有几个关键细节值得你留意。第一buildKey方法里使用了DESKeySpec配合SecretKeyFactory生成密钥。这跟在new SecretKeySpec(bytes, DES)的区别在于DESKeySpec会对密钥字节做奇偶校验和位调整更符合DES算法规范。在遇到某些严格实现时能避免一些莫名其妙的解密失败。第二加解密都显式指定了DES/CBC/PKCS5Padding。如果你在main方法里把解密调用改为不传IVString decrypted decrypt(encrypted, key, null);在JDK默认实现下cipher.init(DECRYPT_MODE, key)会使用全0的IV。加密时用了随机IV解密时用全0 IV大概率直接抛BadPaddingException。这正好演示了前文说的IV不一致问题。实际项目里生产环境如果没有统一管理IV很容易踩中这个分支。第三加解密的输入输出统一用UTF-8和Base64。UTF-8保证中文不乱码Base64保证密文可以在JSON、日志、数据库文本字段里安全传输。不要直接拼字符串传递二进制密文那样极易发生字节丢失。第四这个工具类并没有把IV拼到密文里实现“自动读取IV”因为老项目里通常IV是固定的我保留了这个设计让调用方显式传入IV更直观。如果你需要更安全的随机IV方案按3.2节的拼接方式改造即可。5. 问题排查清单与实战经验5.1 快速排查表如果你遇到这个异常不用从头看原理直接按下面这张表逐项检查。排查项检查方法修复方式转换字符串加解密两侧分别打印cipher.getAlgorithm()统一为DES/CBC/PKCS5Padding或DES/ECB/PKCS5Padding密钥字节数System.out.println(keyBytes.length)不是8字节时用MD5摘要截取前8字节IV一致性CBC模式下打印IV的Hex值对比解密方使用加密方同一IV密文完整性对比传输前后的Base64字符串检查传输管道是否截断、URL编码是否篡改明文编码确认加解密两侧都用了UTF-8不要混用平台默认字符集算法选择确认是否需要兼容DES存量数据新系统优先AES/GCM5.2 我从实战中总结的几个避坑心得第一条永远不要用Cipher.getInstance(DES)这种简写。我踩过一次坑某台机器上的JDK版本较旧默认补位解析结果跟新版本不同导致同一段代码在测试环境正常、生产环境报填充异常。显式写明三段配置能从根源上消除环境差异。第二条排查填充异常时先把“加密方是否真的加密成功”这步确认掉。有一次我把密文写进日志日志框架对换行符做了转义我复制出来手动拼接时少了一个字符解密必挂。后来我先对密文做Base64解码转成16进制字符串数一下长度发现长度不对才定位到是日志复制的问题不是代码问题。第三条当异常被业务层包装过比如显示的是“解密失败”这类提示而堆栈底部是BadPaddingException优先怀疑密钥和IV不要一上来就怀疑算法配置。算法配置一般不会写错密钥和IV传错才是日常。第四条老系统改造时不要急着删旧解密逻辑。存量密文用旧逻辑解新密文用新逻辑解两边并存直到数据全部迁移。别问我怎么知道的项目X里因为删了旧逻辑导致线上大量数据解不开的教训足够深刻。5.3 一个真实案例复盘最后复盘一次比较典型的排查过程。模拟项目X中A服务加密明文后通过消息队列传给B服务B服务时不时报Given final block not properly padded。加密日志显示加密成功A、B两边的转换字符串、密钥、IV配置也完全一致问题仍偶发。我让A服务打出了加密前明文的Base64让B服务打出了解密前密文的Base64逐字符对比后发现密文尾部偶尔会丢失内容。追查原因是消息队列对超大消息体做了分段处理B服务只消费了第一段。修复方案是在发送方把密文统一转成Base64字符串再放入消息体并且消息队列不做隐式截断问题彻底消失。这个案例想说明的是当加解密代码本身没问题时要多看一眼数据链路。填充异常很多时候不是算法的问题而是密文在传输过程中被改动了。相对这个异常如果你已经试遍了改模式、改密钥、改IV还是没解决那就要往数据链路上去查了。我自己后来养成一个习惯任何涉及加解密的接口联调第一件事就是先定好“转换字符串、密钥、IV、编码”这四个要素形成文档发对方等两边确认一致了再动代码。这套流程能省下一大半联调时间。

相关新闻

模型泛化能力到底行不行?jev-distill-corpus-v3 ood 分布外评估集使用手册

模型泛化能力到底行不行?jev-distill-corpus-v3 ood 分布外评估集使用手册

数据集模型蒸馏人工智能 【免费下载链接】jev-distill-corpus-v3 项目地址: https://ai.gitcode.com/hf_mirrors/SargeDev/jev-distill-corpus-v3 点击查看 免费下载 jev-distill-corpus-v3 是一个 740,957 行的 TypeSafe System One 类型化决策语料库,…

2026/10/17 22:15:16 阅读更多 →
mlx_lm Python API实战:如何快速构建基于DeepSeek-R1-Distill-Qwen-7B-mlx-16bit的聊天应用

mlx_lm Python API实战:如何快速构建基于DeepSeek-R1-Distill-Qwen-7B-mlx-16bit的聊天应用

大模型基础模型推理模型本地部署 【免费下载链接】DeepSeek-R1-Distill-Qwen-7B-chat-mlx-16bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/DeepSeek-R1-Distill-Qwen-7B-chat-mlx-16bit 点击查看 免费下载 DeepSeek-R1-Distill-Qwen-7B-chat-ml…

2026/10/17 22:15:16 阅读更多 →
Vue实现页面左右滑动切换:路由过渡与手势驱动实战指南

Vue实现页面左右滑动切换:路由过渡与手势驱动实战指南

简介:一份基于Vue实现页面切换左右滑动效果的开发文档,面向有一定Vue基础、希望优化移动端或单页应用交互体验的前端开发者。资源为PDF格式,共1个文件,压缩包约40KB,内容紧凑,重点讲解如何借助Vue transiti…

2026/10/17 22:15:16 阅读更多 →

最新新闻

开源Newsletter系统多租户安全设计:MailCheap从账户隔离到API Key撤销全链路指南

开源Newsletter系统多租户安全设计:MailCheap从账户隔离到API Key撤销全链路指南

【免费下载链接】mailcheap Newsletters where you pay for the emails you send, not for dormant subscribers, at a fraction of the price of beehiiv and the like. Open source: self-host it, or use mailcheap.ai. 项目地址: https://gitcode.com/gh_mirror…

2026/10/18 2:58:05 阅读更多 →
为什么Swift-Qwen3.8-27B推理快1.95倍?深入解析UkisAI“推理标记token惩罚“的防过度思考训练法

为什么Swift-Qwen3.8-27B推理快1.95倍?深入解析UkisAI“推理标记token惩罚“的防过度思考训练法

大模型推理模型本地部署多模态 【免费下载链接】Swift-Qwen3.8-27B-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/ukisai/Swift-Qwen3.8-27B-GGUF 点击查看 免费下载 Swift-Qwen3.8-27B 是 UkisAI 推出的 Qwen3.8-27B 推理加速衍生模型:通过"推理标记 t…

2026/10/18 2:58:05 阅读更多 →
G-Helper充电上限重启后不生效?先查配置和开机任务

G-Helper充电上限重启后不生效?先查配置和开机任务

G-Helper充电上限重启后不生效?先查配置和开机任务 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Exper…

2026/10/18 2:58:05 阅读更多 →
用LocalClaw搭建多Agent协作系统:架构、代码与踩坑记录

用LocalClaw搭建多Agent协作系统:架构、代码与踩坑记录

先说结论:这两年只要聊到AI应用,十个技术方案里八个在谈Agent。但大多数人做的Agent其实是个"单机版"——一个能调用工具、能回答问题的对话机器人,离真正的"协作系统"还差得远。我最近用LocalClaw重新搭了一套多Agent协…

2026/10/18 2:58:05 阅读更多 →
8GB显存也能微调7B大模型:轻量化训练平台实战指南

8GB显存也能微调7B大模型:轻量化训练平台实战指南

如果你的显卡只有8GB显存,手头有一万多条行业问答数据,想微调一个7B参数的开源大模型——这个想法放在两年前大概率会被劝退,因为全参微调最小的7B模型,显存需求也在60GB往上。但现在,“轻量化训练平台”这个概念&…

2026/10/18 2:58:05 阅读更多 →
KNN算法实战拆解:从约会数据分类到模型评估的完整流程

KNN算法实战拆解:从约会数据分类到模型评估的完整流程

提起KNN,很多人第一反应就是“机器学习最简单的算法”,没有之一。这次我要拆的案例,是经典的约会数据分类:根据一个人每年飞行的里程、玩游戏时间占总时间的百分比、每周吃掉的冰淇淋公升数,去判断对方在约会对象眼中属…

2026/10/18 2:57:05 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →