Skip to content

Repository files navigation

CD Key Generator

企业级 CD Key 卡密生成与管理系统,支持密钥生成、验证、激活、生命周期管理,以及完整的 RBAC 权限和审计日志。

功能特性

  • 密钥生成 — 基于密码学安全的随机密钥生成,支持自定义模板(字符集、段数、前缀、有效期)
  • 密钥验证 / 激活 — 公开 API,无需认证,支持仅验证或验证并激活,带频率限制
  • 生命周期管理 — 冻结、解冻、销毁(不可逆),批量操作支持
  • 安全存储 — AES-256-GCM 加密存储、SHA-256 哈希索引、HMAC 完整性校验
  • RBAC 权限 — 6 个默认角色、26 项细粒度权限,支持自定义角色
  • 审计日志 — 自动记录所有操作,SHA-256 链式哈希防篡改,支持完整性验证
  • 用户管理 — 用户注册(需审核)、角色分配、密码重置
  • 数据看板 — 密钥统计、生成/激活趋势图

技术栈

技术
后端 Express 4 + TypeScript + sql.js (SQLite WASM)
前端 React 18 + Ant Design 5 + Zustand + Vite 5
安全 bcryptjs + JWT 双令牌 + AES-256-GCM + SHA-256 + HMAC
验证 Zod

快速开始

环境要求

  • Node.js >= 18.0.0
  • npm >= 9

安装与启动

# 克隆项目
git clone https://github.com/shining-orange/CDKeyGenerator.git
cd CDKeyGenerator

# 安装依赖
npm install

# 配置环境变量
cp .env.example .env
# 编辑 .env 修改 JWT_SECRET 和 ENCRYPTION_ROOT_KEY

# 初始化数据库(首次运行)
npm run db:init

# 启动开发服务器(前后端同时启动)
npm run dev

前端访问 http://localhost:5173 ,后端 API 地址 http://localhost:3000

默认账号

用户名 密码 角色
admin admin123 super_admin

新注册用户默认未激活,需管理员在后台审核通过。

项目结构

CDKeyGenerator/
├── server/                    # 后端服务
│   └── src/
│       ├── config/            # 环境变量、常量、限流配置
│       ├── db/                # 数据库 Schema、迁移、种子数据
│       ├── middleware/        # 认证、RBAC、审计、限流、校验
│       ├── routes/            # 路由定义(9 个模块)
│       ├── controllers/       # 请求处理
│       ├── services/          # 业务逻辑(加密、密钥生成、审计等)
│       ├── validators/        # Zod 请求校验
│       ├── types/             # TypeScript 类型定义
│       └── utils/             # 工具函数
├── client/                    # 前端应用
│   └── src/
│       ├── api/               # Axios API 客户端
│       ├── pages/             # 页面组件(10 个页面)
│       ├── stores/            # Zustand 状态管理
│       ├── router/            # 路由守卫
│       ├── hooks/             # 自定义 Hooks
│       ├── styles/            # 全局样式
│       └── utils/             # 工具函数
└── package.json               # Monorepo 工作区配置(npm workspaces)

页面说明

路径 页面 权限
/login 登录 公开
/activate 卡密验证/激活 公开
/dashboard 数据看板 dashboard:view
/keys 密钥管理 key:view
/batches 批次管理 batch:view
/templates 密钥模板 template:view
/users 用户管理 user:view
/audit 审计日志 audit:view
/settings 系统设置 role:view
/profile 个人资料 登录即可

API 接口

公开接口(无需认证)

认证相关

方法 路径 说明
GET /api/health 健康检查
GET /api/auth/captcha 获取 SVG 验证码
POST /api/auth/login 登录(返回 access + refresh Token)
POST /api/auth/register 用户注册(需管理员审核)
POST /api/auth/refresh 刷新访问令牌

密钥验证/激活(频率限制)

方法 路径 限流 说明
POST /api/verify 10 次/分钟 验证或激活密钥
POST /api/verify/check 20 次/分钟 仅验证密钥有效性

请求示例:

# 验证密钥
curl -X POST http://localhost:3000/api/verify \
  -H "Content-Type: application/json" \
  -d '{"keyCode":"XXXX-XXXX-XXXX-XXXX"}'

# 激活密钥
curl -X POST http://localhost:3000/api/verify \
  -H "Content-Type: application/json" \
  -d '{"keyCode":"XXXX-XXXX-XXXX-XXXX","activate":true}'

响应格式:

{
  "success": true,
  "data": {
    "valid": true,
    "status": "activated",
    "message": "密钥已成功激活",
    "expiresAt": "2025-12-31T23:59:59.000Z",
    "activatedAt": "2025-06-15T10:30:00.000Z"
  }
}

错误码:

错误码 说明
INVALID_KEY 无效密钥
KEY_EXPIRED 密钥已过期
KEY_FROZEN 密钥已被冻结
KEY_DESTROYED 密钥已销毁
KEY_ALREADY_ACTIVATED 密钥已被使用
HMAC_MISMATCH 密钥校验失败

认证接口(需 Bearer Token)

密钥管理

方法 路径 权限 说明
GET /api/keys key:view 密钥列表(分页、筛选)
GET /api/keys/stats key:view 密钥统计
POST /api/keys/generate key:generate 生成密钥
POST /api/keys/export key:export 导出密钥(JSON/CSV)
PUT /api/keys/:id/freeze key:freeze 冻结密钥
PUT /api/keys/:id/unfreeze key:freeze 解冻密钥
DELETE /api/keys/:id key:destroy 销毁密钥(不可逆)

批次管理

方法 路径 权限 说明
GET /api/batches batch:view 批次列表
PUT /api/batches/:id/archive batch:archive 归档批次

模板管理

方法 路径 权限 说明
GET /api/templates template:view 模板列表
POST /api/templates template:create 创建模板
PUT /api/templates/:id template:update 更新模板
DELETE /api/templates/:id template:delete 删除模板

用户管理

方法 路径 权限 说明
GET /api/users user:view 用户列表
POST /api/users user:create 创建用户
PUT /api/users/:id user:update 更新用户
PUT /api/users/:id/status user:update 启用/禁用
PUT /api/users/:id/roles user:assign_role 分配角色
DELETE /api/users/:id user:delete 删除用户

角色权限

方法 路径 权限 说明
GET /api/roles role:view 角色列表
GET /api/roles/permissions role:view 权限列表
POST /api/roles role:create 创建角色
PUT /api/roles/:id role:update 更新角色权限
DELETE /api/roles/:id role:delete 删除角色

审计日志

方法 路径 权限 说明
GET /api/audit/logs audit:view 日志列表
GET /api/audit/verify-chain audit:verify 验证链式完整性

数据看板

方法 路径 权限 说明
GET /api/dashboard/stats dashboard:view 统计数据
GET /api/dashboard/trend dashboard:view 趋势数据

环境配置

变量 默认值 说明
NODE_ENV development 运行环境
PORT 3000 服务端口
JWT_SECRET - JWT 签名密钥(生产环境必填)
JWT_ACCESS_EXPIRES 15m 访问令牌过期时间
JWT_REFRESH_EXPIRES 7d 刷新令牌过期时间
ENCRYPTION_ROOT_KEY - AES-256 加密根密钥(64 位十六进制,生产环境必填)
CLIENT_URL http://localhost:5173 前端地址(CORS)
DB_PATH ./data/cdkey.db 数据库文件路径

生产模式下 JWT_SECRETENCRYPTION_ROOT_KEY 必须设置且不能为默认值,否则服务拒绝启动。

默认角色与权限

权限 super_admin key_admin key_operator audit_viewer api_consumer regular_user
看板 Y Y Y - - Y
密钥查看 Y Y Y - - -
密钥生成 Y Y Y - - -
密钥冻结 Y Y - - - -
密钥销毁 Y - - - - -
密钥导出 Y Y - - - -
批次管理 Y Y Y - - -
模板管理 Y Y Y - - -
用户管理 Y - - - - -
角色管理 Y - - - - -
审计日志 Y - - Y - -
验证接口 Y Y - - Y -

安全机制

  • 密钥存储 — 密钥原文经 AES-256-GCM 加密后存储,索引使用 SHA-256 哈希
  • 密钥校验 — 每个密钥附带 HMAC 签名,验证时先校验完整性再检查状态
  • 密钥生成 — 使用 crypto.randomBytes() + 模消除偏置算法,保证密码学安全
  • 认证 — bcrypt 密码哈希 + JWT 双令牌(访问/刷新)+ 自动静默刷新
  • 验证码 — SVG 图形验证码,带噪点干扰线,5 分钟有效期
  • 限流 — 令牌桶算法,登录 5 次/15 分钟,验证 10 次/分钟
  • 审计 — 链式 SHA-256 哈希,任何篡改可被检测

常用命令

npm run dev            # 开发模式(前后端同时启动)
npm run dev:server     # 仅启动后端
npm run dev:client     # 仅启动前端
npm run build          # 构建生产版本
npm run build:server   # 仅构建后端
npm run build:client   # 仅构建前端
npm run start          # 运行编译后的服务端
npm run db:init        # 初始化/重置数据库

数据库

系统使用 SQLite(通过 sql.js WASM 引擎),数据库文件位于 server/data/cdkey.db

共 12 张表:rolespermissionsrole_permissionsusersuser_roleskey_templatesbatchescd_keysaudit_logsverify_requestssystem_settingsencryption_keys

sql.js 为内存数据库,进程退出时自动落盘。请勿在运行中直接操作 db 文件。

License

MIT

About

企业级 CD Key 卡密生成与管理系统

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages