Skip to content

Repository files navigation

SignKit

SignKit 是一款纯前端 PDF 签名工具:上传文档、手写签名、添加字段、导出成品,全程在浏览器内完成,无需安装任何软件。可选启用账号云同步,所有数据端到端加密,服务器仅存储密文。

在线体验:https://pipicore.cn/sign/

编辑器

特性

手写签名与签名库

签名画板书写,笔迹自动保存到全局签名库。签名跨文档复用——再次使用时直接从"我的签名"中选取,无需重画。签名库支持删除管理。

签名画板

字段标注

日期、文本、勾选三种字段类型,点击工具栏即可添加,拖动定位到任意位置。

工具栏菜单

全屏手势控制

选中签名后,手指在页面任意位置即可拖动或双指等比缩放签名,无需精确点击签名本身;拖动期间页面滚动自动冻结,交互不冲突。

命名导出

导出前可编辑文件名,默认取文档名。iOS 环境走系统分享面板(存到文件 / 发送),微信内置浏览器同样可用。

导出命名

端到端加密云同步

  • 注册账号后,文档与签名自动双向同步(登录 / 启动 / 编辑返回时触发)
  • 数据在浏览器内加密后上传,服务器仅存储密文,无法读取内容
  • 换设备登录同一账号,数据自动拉回

登录持久化

登录状态与加密密钥持久化在设备本地,刷新或重开浏览器无需重新登录,启动即自动恢复并同步。

登录

多文档管理

文件列表管理所有文档,支持删除(本地与云端同步)。

文件列表

使用流程

  1. 打开页面,上传 PDF 文档
  2. 点击右下角 + 打开工具栏,选择签名 / 日期 / 文本 / 勾选
  3. 签名:在画板书写 → 使用签名 → 拖动 / 缩放定位
  4. 导出:点击导出 → 编辑文件名 → 确认(iOS 走分享面板)
  5. 注册账号后,以上操作自动同步到云端

部署

环境要求

  • 前端:任意静态服务器(nginx / GitHub Pages / 对象存储),无构建步骤
  • 后端(可选,云同步用):Node.js ≥ 16,零第三方依赖

前端

git clone https://github.com/chenyynx/signkit.git
# 将 signkit/ 目录部署到静态服务器即可

依赖(pdf.js / signature_pad / pdf-lib / crypto-js)已包含在仓库内。

后端(云同步)

node signkit-server/server.js

默认监听 8788 端口,数据存放于 signkit-data/ 目录(JSON 元数据 + 密文文件)。提供接口:

接口 说明
POST /api/register 注册(返回 JWT 与密钥盐)
POST /api/login 登录
GET /api/documents 文档列表
POST /api/documents 上传 / 覆盖文档(密文)
GET /api/documents/:id 下载文档
DELETE /api/documents/:id 删除文档

nginx 反代

location /sign-api/ {
    rewrite ^/sign-api/(.*)$ /api/$1 break;
    proxy_pass http://127.0.0.1:8788;
    client_max_body_size 20m;
}

加密设计

  • 密钥派生:密码 + 服务器下发的盐 → PBKDF2(SHA-256,10000 次迭代)→ 64 字节密钥(前 32 字节 AES 密钥,后 32 字节 HMAC 密钥)
  • 加密:AES-256-CTR(随机 16 字节计数器)+ HMAC-SHA256 完整性校验(Encrypt-then-MAC)
  • 双实现互通:原生 WebCrypto 与 crypto-js 纯 JS 实现输出格式一致。微信内置浏览器(XWeb 内核 WebCrypto 不可靠)自动切换纯 JS 实现,与 Safari 数据互通
  • 盐跟随账号:盐由服务器注册时生成、登录时下发,换设备可派生同一密钥
  • 密码存储:服务器仅保存 scrypt 哈希;加密密钥仅持久化于设备本地
  • 数据防护:服务器拒绝过小密文(<100 字节),防止客户端异常数据覆盖云端

项目结构

signkit/
├── index.html          # 单页入口
├── app.js              # 业务逻辑(手势 / 字段 / 导出 / 同步集成)
├── sync.js             # 云同步:登录 + 端到端加密(双实现互通)
├── style.css           # DocuSeal 风格视觉
├── vendor/             # crypto-js(微信降级加密)
├── fonts/              # Playfair Display 标题字体(自托管)
├── docs/screenshots/   # README 配图
└── signkit-server/     # 云同步后端(零依赖 Node)

技术栈

层 技术
前端 原生 HTML / CSS / JS(ES Module),零构建
PDF 渲染 pdf.js(每页转图连页显示)
手写签名 signature_pad 5.1.4(DPR 高清)
PDF 导出 pdf-lib
加密 WebCrypto(原生)/ crypto-js(降级)
后端 Node.js 内置 http + crypto,零第三方依赖
本地存储 IndexedDB(文档)+ localStorage(字段 / 签名库 / 登录态)

License

CC BY-NC 4.0 — 署名-非商业。允许个人使用与二次开发(需署名),禁止商用。

About

打开即用的 PDF 签名工具:手写签名、字段标注、命名导出、端到端加密云同步 —— 浏览器即开即用,无需安装

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages