扩充 CRC 预设并发布日期版本 2026.8.22

This commit is contained in:
mid
2026-08-22 16:36:37 +08:00
parent 8bc6032f38
commit 1aea179f19
10 changed files with 153 additions and 61 deletions
+8 -8
View File
@@ -4,14 +4,14 @@
一个匿名访问、自托管的浏览器本地工具箱。支持多人同时使用;除全局导航顺序外,文本、密钥、文件、图片和计算结果均只存在于各自浏览器中,不会发送到服务端。
当前应用版本:`0.3.0`。
当前应用版本:`2026.8.22`。
## 内置工具
- UTF-8 与 Hex 互转,固定路径为 `/tools/utf8-hex`
- Base64 与 Base64 URL 编码、解码,解码结果支持 UTF-8、连续 Hex 和代码字节数组
- AES-CMAC,支持 AES-128、AES-192 和 AES-256 密钥
- CRC-8/16/32/64 预设与自定义参数,支持内联 Hex 字节、BIN 和多 block Intel HEX
- 16 种 CRC-8/16/32/64 标准预设与自定义参数,支持内联 Hex 字节、BIN 和多 block Intel HEX
- 固件 SHA-256 / SHA-512,支持 Intel HEX 有效数据和带地址/长度的 Block 校验头
- RSA 2048/3072/4096 位密钥对,导出 PEM,以及可分别复制的 N/E Hex 或代码字节数组
- RSA 签名验证,支持 PKCS#1 v1.5、RSA-PSS(默认)、SHA-256/384/512、PEM/X.509/N-E 公钥,以及文本、Hex、原始文件、Intel HEX 有效数据和 Block 校验头
@@ -72,7 +72,7 @@ CHANGELOG.md 版本变更、修复和验证记录
- UTF-8 / Hex 工具的固定 ID 为 `utf8-hex`,路径为 `/tools/utf8-hex`。它按 UTF-8 字节转换文本;Hex 输入接受连续形式,或以空白、英文逗号、中文逗号分隔的片段,并允许每个片段使用可选的 `0x` 前缀。无效 UTF-8 字节必须报错,不能静默替换字符。
- Base64 支持标准和 URL-safe 形式;解码结果可显示为严格 UTF-8、连续 Hex 或 `0x48, 0x9F, ...` 字节数组。无效字符、错误填充和非规范编码必须报错。
- AES-CMAC 密钥长度可选 128、192 或 256 位,默认 128 位,并分别严格要求 16、24 或 32 字节;不自动补零或截断。密钥和 Hex 消息接受连续 Hex,或空格、换行、英文/中文逗号分隔,并允许片段使用可选的 `0x` 前缀。CMAC 标签始终为 128 位;AES-128 向量遵循 RFC 4493,AES-192/256 向量遵循 NIST SP 800-38B。
- CRC 支持内联 Hex 字节、BIN 和多 block Intel HEX,提供 CRC-8/16/32/64 预设,并允许自定义 `Width`、`Poly`、`Init`、`XorOut`、`RefIn` 和 `RefOut`。内联 Hex 接受连续形式,或以空白、英文逗号、中文逗号分隔的片段,并允许每个片段使用可选的 `0x` 前缀;空输入和无效字节格式会被拒绝,解析与计算均在独立 Web Worker 中完成。`RefIn`/`RefOut` 在页面中标为输入/输出位反转,不表示字节顺序或整个数据倒序。文件模式的总 CRC 对按地址升序拼接的有效数据计算,不填充地址空洞,同时输出每个 block 的结果。
- CRC 支持内联 Hex 字节、BIN 和多 block Intel HEX,提供 16 种按位宽分组的标准预设,并允许自定义 `Width`、`Poly`、`Init`、`XorOut`、`RefIn` 和 `RefOut`。预设包括 CRC-8/SMBUS、MAXIM-DOW、SAE-J1850;CRC-16/ARC、DNP、IBM-3740、IBM-SDLC、KERMIT、MODBUS、USB、XMODEM;CRC-32/ISO-HDLC、ISCSI、MPEG-2;CRC-64/ECMA-182、XZ。界面保留常用别名:CRC-8、CCITT-FALSE、CCITT、X-25 和 CRC-32C;有歧义的 CCITT 只作为 KERMIT 后的辅助别名展示,并始终通过完整名称与 IBM-3740(CCITT-FALSE)区分。内联 Hex 接受连续形式,或以空白、英文逗号、中文逗号分隔的片段,并允许每个片段使用可选的 `0x` 前缀;空输入和无效字节格式会被拒绝,解析与计算均在独立 Web Worker 中完成。`RefIn`/`RefOut` 在页面中标为输入/输出位反转,不表示字节顺序或整个数据倒序。文件模式的总 CRC 对按地址升序拼接的有效数据计算,不填充地址空洞,同时输出每个 block 的结果。
- 固件 Hash 只接受 Intel HEX,输出 SHA-256 和 SHA-512。“有效数据”与“Block 校验头”模式的确切字节流见“Intel HEX 与 Block 校验头固定语义”;默认校验头字节序为 Big Endian。
- RSA 密钥对工具只生成 2048、3072、4096 位密钥,公钥指数固定为 65537。优先使用 Web Crypto,只有本地提供者不可用或失败时才动态加载 `node-forge` 回退,其随机种子仍只来自 `crypto.getRandomValues`;公钥为 SPKI PEM,私钥为 PKCS#8 PEM,N/E 可分别显示为连续 Hex 或代码字节数组。
- RSA 签名验证工具只执行验证,不接收私钥或生成签名。它默认选择 RSA-PSS,并支持切换到 RSA PKCS#1 v1.5;Hash 支持 SHA-256/384/512,不支持 SHA-1。PSS 的 Salt Length 必须显式给出,默认取 Hash 长度与当前模数编码上限中的较小值,并受当前模数与 Hash 的编码上限约束。公钥可使用单个 SPKI `PUBLIC KEY`、PKCS#1 `RSA PUBLIC KEY`、X.509 `CERTIFICATE` PEM 块或 N/E Hex 参数;E 按无符号 Hex 整数解析,奇数位输入会在最左侧补一个 `0`,因此 `10001`、`010001` 均表示十进制 65537,其他 Hex 字节输入仍要求偶数位。X.509 只用于提取 RSA 公钥和展示 Subject、序列号、有效期,不验证证书链、颁发者、用途或可信状态。验证接受 1024 至 8192 位 RSA 公钥,低于 2048 位时显示兼容性警告。
@@ -263,10 +263,10 @@ docker compose restart web-tools
## 离线镜像
若交付目录包含 `personal-web-tools-0.3.0-amd64.tar`,可直接导入:
若交付目录包含 `personal-web-tools-2026.8.22-amd64.tar`,可直接导入:
```bash
docker load -i personal-web-tools-0.3.0-amd64.tar
docker load -i personal-web-tools-2026.8.22-amd64.tar
docker compose up -d --no-build
```
@@ -320,7 +320,7 @@ npm audit --audit-level=low
`npm run check` 会依次运行全部 Vitest 测试、TypeScript/Vue 类型检查和生产构建。服务端测试使用随机本地端口验证 SPA 直达路由、静态资源 404 与缓存策略、导航 API、请求大小限制及跨源浏览器写入拦截。
自动化测试还覆盖标准算法向量、Base64 规范性、CRC 内联 Hex 已知向量/多种分隔格式/资源上限、Intel HEX 记录与 block 边界、固件 Hash 与大小端 Block 头向量、RSA PKCS#1 v1.5/PSS 三种 Hash、PEM/X.509/N-E 公钥解析、签名编码与 PSS 盐长边界、原始文件、Intel HEX 有效数据与大小端 Block 校验头的验签字节语义、文件替换成功提交、失败保留旧状态、过期 Worker 响应隔离和 Worker 生命周期异常、PNG 头部与像素限制、导航排序纯函数、目录/图标/懒加载组件一致性,以及原子写入失败后的临时文件清理。
自动化测试还覆盖标准算法向量、Base64 规范性、16 种 CRC 预设的名称/参数/Check 值、空输入与 64 位结果边界、CRC 内联 Hex 已知向量/多种分隔格式/资源上限、Intel HEX 记录与 block 边界、固件 Hash 与大小端 Block 头向量、RSA PKCS#1 v1.5/PSS 三种 Hash、PEM/X.509/N-E 公钥解析、签名编码与 PSS 盐长边界、原始文件、Intel HEX 有效数据与大小端 Block 校验头的验签字节语义、文件替换成功提交、失败保留旧状态、过期 Worker 响应隔离和 Worker 生命周期异常、PNG 头部与像素限制、导航排序纯函数、目录/图标/懒加载组件一致性,以及原子写入失败后的临时文件清理。
## 增加工具
@@ -434,9 +434,9 @@ AI 不应仅修改 `dist/`;必须修改源码并重新构建。不得覆盖或
## 版本与发布
应用版本的唯一权威来源是 `package.json`。`package-lock.json` 记录完整依赖树、下载地址和完整性摘要,供 `npm ci` 复现安装;其中项目自身的版本会在文件顶部和 `packages[""]` 中各出现一次,其余 `version` 都是第三方依赖版本,不应手工统一修改。
应用版本的唯一权威来源是 `package.json`。版本采用 npm/SemVer 兼容的日历版本 `YYYY.M.D`,例如 `2026.8.22`;月份和日期不使用前导零。每个自然日只发布一个正式版本,需要预发布验证时可使用 `YYYY.M.D-rc.N`。`package-lock.json` 记录完整依赖树、下载地址和完整性摘要,供 `npm ci` 复现安装;其中项目自身的版本会在文件顶部和 `packages[""]` 中各出现一次,其余 `version` 都是第三方依赖版本,不应手工统一修改。
使用 `npm version patch --no-git-tag-version`(或按兼容性选择 minor/major)可以同步更新 `package.json` 与 `package-lock.json`。按当前工程结构,一次完整版本发布需要更新以下 5 个已跟踪文件:
使用 `npm version YYYY.M.D --no-git-tag-version` 可以同步更新 `package.json` 与 `package-lock.json`。按当前工程结构,一次完整版本发布需要更新以下 5 个已跟踪文件:
1. `package.json`
2. `package-lock.json`