前言

平时写代码经常需要把一段代码发给同事看,微信发过去格式全乱,QQ 也好不到哪去。Pastebin 国内又访问不了。

所以自己动手写了一个代码分享工具:PasteShare,支持语法高亮、端到端加密、二维码分享,可以部署到自己服务器上。

项目已开源,仓库名 BigsurCalifornia/pasteshare,在 GitHub 上搜就能找到。

觉得有用的话给个 ⭐ Star 支持一下!


这个工具能干什么

简单说就是:粘贴代码 → 生成链接 → 发给别人看

核心功能:

  • 📝 粘贴代码或文本,自动生成唯一短链接
  • 🎨 30+ 种编程语言语法高亮(JavaScript、Python、Java、Go、Rust...)
  • 🔒 端到端加密:内容在浏览器里加密,服务器看不到明文
  • ⏰ 设置过期时间:1小时 / 1天 / 7天 / 30天 / 永不过期
  • 📱 生成二维码,手机扫一扫就能看
  • 📋 一键复制内容和分享链接
  • 👁 浏览量统计
  • 🐳 Docker 一键部署

技术栈

层级技术
前端React 18 + TypeScript + Vite + Tailwind CSS
后端Node.js + Express + TypeScript
数据库SQLite(better-sqlite3)
加密Web Crypto API(AES-256-GCM)

选 SQLite 是因为零配置、单文件数据库,部署的时候不需要额外装 MySQL 或 PostgreSQL,特别适合这种轻量工具。


怎么跑起来

本地开发

git clone https://github.com/BigsurCalifornia/pasteshare.git
cd pasteshare
npm install
npm run dev

打开 http://localhost:5173 就能用了。

Docker 部署(推荐)

git clone https://github.com/BigsurCalifornia/pasteshare.git
cd pasteshare
docker compose up -d

访问 http://你的服务器IP:3001 就行,数据自动持久化。


加密是怎么实现的

这是我觉得比较有意思的部分。很多 Pastebin 类工具的"加密"其实是服务端加密,服务器能看到你的明文。

PasteShare 用的是真正的端到端加密

  1. 用户输入密码
  2. 浏览器用 PBKDF2(10万次迭代)从密码派生出密钥
  3. 用 AES-256-GCM 在浏览器里加密内容
  4. 只有密文发送到服务器
  5. 查看时在浏览器里解密

服务器全程看不到明文,就算数据库被拖了,没有密码也解不开。

核心代码大概长这样:

// 加密
async function encrypt(plaintext: string, password: string): Promise<string> {
  const salt = crypto.getRandomValues(new Uint8Array(16));
  const iv = crypto.getRandomValues(new Uint8Array(12));
  const key = await deriveKey(password, salt);  // PBKDF2 派生密钥

  const encrypted = await crypto.subtle.encrypt(
    { name: 'AES-GCM', iv },
    key,
    new TextEncoder().encode(plaintext)
  );

  // 把 salt + iv + 密文打包成 base64
  return arrayBufferToBase64(pack(salt, iv, encrypted));
}

用的是浏览器原生的 Web Crypto API,不依赖任何第三方加密库。


API 接口

如果你想用脚本批量创建分享,可以直接调 API:

# 创建一个分享
curl -X POST http://localhost:3001/api/pastes \
  -H "Content-Type: application/json" \
  -d '{"title":"测试","content":"print(hello)","language":"python","expiresIn":"7d"}'

# 返回
# {"id":"abc123","url":"/p/abc123","expiresAt":"2026-05-07T00:00:00.000Z"}

也可以集成到你的 CI/CD 里,比如构建失败时自动把日志发到 PasteShare 生成链接。


项目结构

pasteshare/
├── client/                  # React 前端
│   ├── src/
│   │   ├── components/      # UI 组件
│   │   ├── pages/           # 页面
│   │   ├── api.ts           # API 调用
│   │   ├── crypto.ts        # 加密/解密
│   │   └── languages.ts     # 语言配置
├── server/                  # Express 后端
│   └── src/
│       ├── routes/paste.ts  # API 路由
│       ├── db.ts            # 数据库
│       └── index.ts         # 入口
├── Dockerfile               # Docker 构建
├── docker-compose.yml       # 一键部署
└── README.md

前后端分离,monorepo 结构,用 npm workspaces 管理。


和同类工具对比

功能PasteSharePastebin.comPrivateBinUbuntu Pastebin
语法高亮✅ 30+语言
端到端加密
可自部署
二维码
国内访问✅ 自己部署❌ 很慢
技术栈Node.jsPHPPHPPython
数据库SQLiteMySQL文件PostgreSQL

后续计划

  • [ ] 支持 Markdown 渲染预览
  • [ ] 支持文件上传(图片、文档)
  • [ ] 用户系统(管理自己的分享)
  • [ ] 自定义短链接
  • [ ] 暗色/亮色主题切换

最后

项目完全开源,MIT 协议,随便用。

如果觉得有用,欢迎:

有问题评论区聊!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐