这个项目的 git log 是我所有项目里最密集的一份:13 个提交,全部落在 2026 年 10 月 6 日,从早上 11:38 的「6 个工具首版」到深夜 23:24 的「音乐解锁大扩展 +911 行」。一天做完一个 20 个工具的开发者工具箱,这篇就是当天的流水账加上值得记的几个实现。
Toolbox 现在收录 20 个工具:JSON 格式化、时间戳转换、进制与编码、UUID、二维码、密码生成、Markdown 预览、文本对比、Cron 解析、JWT 解析、对比度检查……全部纯前端,数据不出浏览器,PWA 离线可用。口号挂在 README 第一行:免费、无需登录、数据不上传。
零依赖,但有三处例外
整个站只有一个 HTML 文件加 1459 行原生 JS。第三方库只准许三个——qrcode、marked、DOMPurify——而且全部按需懒加载:用到二维码才去拉 qrcode 的脚本,加载失败还能重试。Markdown 预览必须过 DOMPurify 消毒,因为预览窗口渲染的是用户粘贴的任意文本。
其余全是手搓。文本对比是自己实现的逐行 LCS diff,用 Uint16Array 做动态规划表,限 500 行防止卡死;进制转换是 BigInt 实现的任意长度转换;密码生成器先保证每类字符至少出现一次,再 Fisher-Yates 洗牌打散固定位置,强度条直接算熵。
最离谱的支线:在浏览器里解密酷狗
第 16:40 那个提交写着「音乐解锁(酷狗 KGM/KGMA/VPR)」,这是全天最野的一个功能。原理不复杂:KGM 文件头第 0x1c 处藏着 17 字节的密钥,音频数据就是逐字节异或加密的,核心一行:
v = audio[i] ^ key[i % 17] ^ KGM_MASK_PREDEF[i % 272] ^ maskLarge[i >> 4]272 字节的预置掩码硬编码在源码里,另一个 1.1MB 的大掩码用 DecompressionStream("gzip") 流式解压成 6.5MB(每 16 字节音频用 1 字节掩码,所以理论上限 104MB)。解密按 1MB 分块,每块之间 setTimeout(0) 让出主线程,进度条才不会把页面卡死。解完还要靠魔数嗅探判断真实格式——ID3 是 mp3,fLaC 是无损,RIFF 是 wav——文件名顺手去掉 .kgm 后缀。
这个功能存在的理由很简单:我自己的歌单里有几个这种文件,市面上在线解锁站要传音频到别人服务器,我不放心。在浏览器里做,文件根本不出本地。
当天修的两个自己的 bug
深夜的日志里躺着两次返工。一次是 v1.1 修「每日一签」:用 UTC 日期做种子,导致晚上 8 点之后显示的是"昨天"的签——对日期做哈希取语录这个设计没错,错在用了哪个时区。另一次更典型:v1.5 重做了导航,把单行横滚改成了可换行的分组布局,因为旧版在鼠标滚轮下拖不动,排在后面的十几个工具根本选不到——一个从第一版就存在、直到自己天天用才发现的问题。
哦对,还有一个提交叫「忽略并移除误提交的 .mimosa 扫描器状态目录」。事故现场保留在历史里,就不删了。
源码在 GitHub,工具箱在 toolbox.adcakeyuan.top,收藏到书签栏合适,哪天断网了它还能用。