跳到主内容
d.devtul.fun
EN
博客

关于这些工具背后的东西

不定期写一些编码格式、协议、算法和隐私相关的笔记。没有固定更新频率,想到什么写什么。

像高手一样对比代码和文本文件

用肉眼比对两个文件,是差异溜进生产环境的典型方式。Git 和标准 diff 工具提供了词级、分支级、容忍空白的对比,几秒钟就能跑完。

开发者必备的 Markdown 语法速查表

GitHub Flavored Markdown 是 README、Issue 和文档的通用语言。这份速查表把源码和渲染结果一一对照,你平时真正用到的每个写法都在上面。

Base64 不是加密,那它到底是干什么的

很多人第一次见到 Base64 时都会有个误解:以为把内容变成一串看不懂的字符就等于加密了。其实它连"隐藏"都算不上。

Cron 表达式完全参考指南

Cron 表达式看着像一串乱码,但只要弄清五个字段各自的取值范围和每个特殊符号的确切含义,大部分表达式你都能一眼读懂。这篇是放在终端旁边随时查的参考。

Cron 表达式入门:五个字段读懂定时任务

Cron 表达式看起来像一串乱码,但拆开来看不过是五个各自独立的字段。理解每个字段的取值范围,大部分表达式就都能读懂了。

什么是 UUID?写给开发者的完整指南

UUID 是一个 128 位的标识符,写成 36 个字符。本文讲清各版本(v1、v3/v5、v4、v7)、为什么分布式系统偏爱它而非自增主键、碰撞概率的直观解释,以及当数据库主键时的性能代价。

JWT 安全最佳实践:一份生产环境清单

一份生产环境的 JWT 安全清单:固定算法、挡住 alg:none 与 RS256 降级成 HS256 的混淆攻击、校验 iss/aud、refresh token 存 httpOnly cookie,并讲清无状态吊销为何困难。

什么是 JWT?写给开发者的 JSON Web Token 入门

JWT 是三段 Base64url 组成:header、payload、signature。本文讲清每段放了什么、为什么 payload 谁都能读、签名防的是篡改而非泄密,以及为什么 JWT 不适合当会话存储。

JSON 和 YAML,什么时候该用哪个

两种格式表达的是同一类东西,但设计取向完全不同。JSON 优先考虑机器解析,YAML 优先考虑人的可读性 —— 这个差别决定了它们各自适合的场合。

Base64 在真实工程里的 7 个用途

Base64 在七处默默干活:JWT、data URI、邮件 MIME、HTTP Basic Auth、JSON/XML 里的二进制、API 签名与密钥传输、K8s Secret。每处都给真实代码和对应的坑。

什么是 Base64 编码?写给开发者的入门说明

Base64 把任意字节变成 64 个安全字符组成的文本。本文讲清字母表、为什么体积固定膨胀 4/3、三种变体的区别,以及 btoa 遇到中文和 emoji 为什么会抛错——并强调它只是编码、不是加密。

密码哈希做对了:bcrypt、scrypt 与 Argon2 开发者指南

用 MD5 或 SHA-256 存密码,是一场等着发生的泄露。这篇文章讲清楚为什么慢、加盐、吃内存的哈希是唯一正确的选择,并给出 bcrypt、scrypt、Argon2id 的可直接运行代码。

为什么这些工具应该跑在你的浏览器里

很多人习惯把日志、密钥、配置文件直接粘进某个在线工具网站。这件事的风险,比大多数人意识到的要高得多。

哈希函数原理详解:从校验和到密码学原语

不止于"它能生成指纹":压缩函数、Merkle-Damgård、海绵结构、生日悖论和 HMAC 到底在底层是怎么工作的。

MD5 与 SHA-256:差别到底在哪里

很多人把 MD5 和 SHA-256 当成可以互换的东西,因为两者都吐出一串十六进制字符。其实不是。这篇文章给出并排对比、真实的碰撞攻击案例,以及 MD5 到底何时仍然够用。

文本对比工具是怎么算出差异的

看起来只是把两段文字标出不同,背后其实是一个用了四十多年的经典算法。理解它,也就理解了为什么对比工具偶尔会"标错位置"。

什么是哈希?MD5、SHA-1、SHA-256 以及该用哪一个

哈希函数能把任意内容变成一串长度固定的"指纹"。这篇文章讲清楚它到底是什么、和加密及编码有什么区别,以及在 2026 年你应该选哪个算法。

正则表达式入门:写给开发者的实战指南

正则实用导览:字符类、量词、锚点、分组、反向引用、前后查找、标志位、回溯失控,以及为什么别用正则去解析 HTML 或 JSON。

URL 和 URI 到底有什么区别

URI 是超集,URL 是子集,URN 是命名那一支。理解 RFC 3986 的五段语法,以及 URL/URI 之分在签名、重定向、SSRF 防护时什么时候才真的要紧。

URL 编码常见示例:一份开发者随手查的对照表

一份实用对照表:空格、&、=、?、#、/、+、@、:、中文、emoji、换行符在 encodeURIComponent、encodeURI 和表单提交三种语境下的不同结果。

URL 编码实战:encodeURIComponent、encodeURI 到底该用哪个

encodeURIComponent 和 encodeURI 不能混用。本文讲清两者精确差异、URLSearchParams 的正确用法、decodeURIComponent 抛 URIError 的原因,以及 Python、Go、Java 的陷阱。

什么是 URL 编码?写给开发者的百分号编码指南

百分号编码在字节层面把不安全字符变成 %XX 三元组。搞清楚保留字符与不安全字符从哪来、为什么空格是 %20 而不是 +,以及双重编码这个坑。

如何在本地对比大体积 JSON 文件

把几 MB 的 JSON 直接丢进在线工具,既会泄露数据又常常把标签页卡死。正确做法是先格式化归一化再比,用 jq 或一段本地运行的 Python 做结构化对比。

JSON 转 YAML(以及反过来):怎么转才不抓狂

转换 JSON 与 YAML 的实用命令和库,外加每一个会静默损坏数据的坑:长字符串折行、null 与空、像 off 这样的布尔陷阱、特殊字符键,以及必然丢失的注释。

写给 Kubernetes 的 YAML:写出凌晨三点也不会崩的 manifest

逐字段拆解一个最小的 Kubernetes Deployment 与 Service:apiVersion 的讲究、labels 与 selector 对不上时静默失效的事故、资源 requests/limits、三种探针的区别,以及上线前怎么 diff。

YAML vs JSON:什么时候该用哪个(以及为什么答案是"两个都用")

YAML 和 JSON 描述的是同一份数据,但服务的读者不同:程序还是人。这篇并排对比讲清可读性、注释、锚点、隐式类型、解析速度,以及 JSON 天生没有的那个安全陷阱。

什么时候该用 YAML(以及什么时候不该)

YAML 适合人频繁手改的配置,不适合机器生成的大批量数据交换。这篇决策指南覆盖 JSON、TOML、INI,以及 CUE、Pkl、Starlark 这类"代码即配置"的取舍,并给出决策表。

常见的 YAML 错误以及如何修复

报错驱动的排错手册:从 "mapping values are not allowed" 到 "found character that cannot start any token",每个错误都给出报错原文、最小复现、根因和修法。

YAML 语法完全指南:你需要知道的每一个指令与边界情况

这是本站最该写扎实的一篇:缩进规则、引号的取舍、块标量与折叠标量的 chomping 差异、流式写法、锚点与合并键、多文档与显式类型标签,每条都配正反例。

什么是 YAML?写给开发者的入门说明

YAML 在 Kubernetes、Docker Compose、CI 和 Ansible 里几乎是无处不在的默认配置格式。本文讲清它到底是什么、为什么把"人类可读"当成首要目标,以及几乎人人都会踩的三个坑。