# staticshield **Repository Path**: stonebox/staticshield ## Basic Information - **Project Name**: staticshield - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-31 - **Last Updated**: 2026-07-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

StaticShield

零后端的静态网页加密保护工具 —— 用密码把 HTML 变成「自解密页面」

https://github.com/user-attachments/assets/a40410bd-827c-4e13-992d-b8f177ec8c60

Stars License AES-256-CBC PBKDF2 Node.js Zero deps

功能特性 · 快速开始 · 工作原理 · CLI · Web GUI · 安全说明 · FAQ

--- StaticShield 把单个 HTML(或整站打包后)用 AES-256 加密成一份自包含的 `.html`:没有密码时只显示加密保护页,输入正确密码才在浏览器端还原原始内容。适合**内部文档、付费内容预览、临时私密页面**等「门禁式」访问控制。 > 💜 觉得有用?欢迎给个 ⭐ Star 支持:github.com/wangshengithub/staticshield ## 功能特性 - **单文件 / 多文件网页加密**:单个 HTML 直接加密;`--bundle` 可把整站(HTML + css/js/图片)内联打包后加密 - **本地 CLI + Web GUI**:命令行批量处理,或浏览器图形界面(本地后端,支持多客户端并行) - **浏览器端实时解密,零后端**:产物是自包含 HTML,部署到 GitHub Pages / 对象存储 / Nginx 等任意静态托管即可 - **随机密码生成**:CSPRNG 生成强密码(默认 8 位,含数字 + 大小写字母),告别弱密码 - **记住我 / 分享链接 / 密码提示**:本机免重复输入;URL Hash 自动解密链接;可选提示文案 - **重叠加密**:对已加密产物再次加密,多层独立密码逐层剥解 - **卡片风解密页**:默认沿用原网页 favicon 作 Logo,自定义错误提示(非原生 alert),配色统一 ## 技术规格 | 项 | 值 | | ---- | --------------------------------------------- | | 对称加密 | AES-256-CBC(PKCS#7 填充) | | 密钥派生 | PBKDF2-SHA256(默认)/ SHA-512,迭代 **1,000,000** 次 | | 完整性 | HMAC-SHA256(Encrypt-then-MAC,先验签后解密,防篡改) | | 解密端 | 浏览器 WebCrypto,零依赖 | | 加密端 | 本地 Node.js 脚本(CLI)+ 本地 Web GUI(浏览器图形界面) | | 运行环境 | Node.js ≥ 18(CLI / GUI 后端),现代浏览器(解密) | ## 快速开始 获取工具(零运行时依赖,无需 `npm install`): ```bash git clone https://github.com/wangshengithub/staticshield && cd staticshield # 或直接下载源码 ``` 环境要求:**Node.js ≥ 18**(内置 WebCrypto)。 ```bash # 加密单个文件(交互输入密码,不回显) node encrypt.js page.html # 多文件 + 指定密码 + SHA-512 + 输出目录 node encrypt.js a.html b.html -p MyPwd123 --sha512 -d ./dist # 记住我 7 天 + 生成分享链接 + 提示文案 node encrypt.js secret.html --remember 7 --share --hint "我的生日" # 多文件网页打包加密(HTML + 独立 css/js/图片) node encrypt.js index.html --bundle -p MyPwd123 # 生成随机密码并用于加密(12 位,自动打印密码) node encrypt.js page.html --gen-pwd 12 # 仅生成一个随机密码(默认 8 位) node encrypt.js --gen-pwd # 打开图形界面(Web GUI) node encrypt.js --gui ``` 加密后生成同名 `.html`(自解密页面)。直接部署或双击打开,输入密码即可查看。若输出与源文件同路径,会自动改名为 `xxx.encrypted.html` 以免覆盖源文件。 ## 工作原理 ``` [加密] 原始 HTML ──(密码 + AES-256 + PBKDF2 + HMAC)──▶ 自解密 .html [部署] 上传到任意静态托管(GitHub Pages / 对象存储 / CDN / Nginx …) [解密] 访客打开页面 ──▶ 输入密码 ──▶ 浏览器 WebCrypto 还原原始 HTML ``` 加密端(CLI / GUI 后端)与解密端共用同一份 WebCrypto 加密核心(`src/crypto-core.js`),产物格式一致、单点维护。 ## CLI 参数 | 参数 | 说明 | 默认 | | ----------------------- | ----------------------------------------------- | ------------- | | `` | 待加密 HTML 文件,支持多个 | — | | `-p, --password ` | 加密密码;未提供则交互式提示输入(不回显) | 交互输入 | | `--sha512` | 使用 PBKDF2-SHA512 | PBKDF2-SHA256 | | `-d, --directory ` | 输出目录 | 当前目录 | | `--remember ` | 记住我过期天数,`0 = 永不过期` | 不启用 | | `--share` | 额外生成可自动解密的分享链接(密码置于 URL hash) | 关闭 | | `--hint ` | 密码提示文案 | 空 | | `--logo ` | 自定义解密页 Logo(默认取原网页 favicon) | 原网页 favicon | | `--bundle` | 单 HTML:内联其 css/js/图片后加密;接目录:批量加密所有 HTML 并打包 zip | 关闭 | | `--gen-pwd [n]` | 生成 n 位随机密码(默认 8,含数字 + 大小写字母)用于加密;不带文件时仅生成 | 关闭 | | `--gui` | 启动本地 GUI 后端(127.0.0.1)并打开浏览器 | 关闭 | | `-h, --help` | 显示帮助 | — | ### 多文件网页(`--bundle`) 当网页是「`index.html` + 独立 `css/` + `js/` + 图片」的多文件结构时,直接加密 `index.html` 会丢失或暴露这些资源。加 `--bundle`,工具会先把 HTML 引用的**本地相对路径**资源全部内联成单个自包含 HTML,再走加密: - `` → `