Skip to content

Repository files navigation

🎯 二维码工坊 - 专业二维码生成器

一个功能强大的在线二维码生成器,支持文本、URL、Wi-Fi等多种内容类型的二维码生成,具备高级加密验证、人机验证和多种导出格式。

✨ 功能特性

🚀 核心功能

  • 多类型支持:文本、URL链接、Wi-Fi网络配置
  • 实时预览:即时生成和显示二维码
  • 自定义样式:前景色、背景色、尺寸调节
  • Logo集成:支持上传自定义Logo图标
  • 批量导出:PNG、SVG、PDF多种格式

🔐 安全特性

  • RSA加密验证:前后端通信全程加密
  • Cloudflare Turnstile:人机验证防止滥用
  • 混合加密体系:AES+RSA双重加密保障

🎨 用户界面

  • 响应式设计:完美适配桌面和移动端
  • 现代化UI:渐变背景、毛玻璃效果
  • 直观操作:一键切换生成类型
  • 实时反馈:操作状态即时提示

🛠️ 技术架构

后端技术栈

  • Node.js:高性能JavaScript运行时
  • Express.js:轻量级Web框架
  • qrcode库:专业二维码生成引擎
  • node-forge:密码学工具库
  • crypto模块:内置加密支持

前端技术栈

  • 原生JavaScript:无框架依赖,性能优异
  • Web Crypto API:浏览器原生加密
  • Canvas API:图像处理和Logo集成
  • jsPDF:PDF文档生成
  • CSS Grid/Flexbox:现代化布局

安全机制

  • RSA-4096:非对称加密
  • AES-256-GCM:对称加密
  • OAEP填充:最优非对称加密填充
  • 认证标签:防止数据篡改

🚀 快速开始

环境要求

  • Node.js 16.0 或更高版本
  • npm 或 yarn 包管理器
  • 现代浏览器(支持Web Crypto API)

安装步骤

  1. 克隆项目
git clone
cd qrcode-workshop
  1. 安装依赖
npm install
  1. 生成密钥对
node generate-keys.js

这将自动生成 .env 文件,包含RSA密钥对配置

  1. 配置环境变量 编辑 .env 文件,添加以下配置:
# RSA密钥配置(已自动生成)
RSA_PUBLIC_KEY="your-public-key"
RSA_PRIVATE_KEY="your-private-key"

# 服务器配置
PORT=3010
NODE_ENV=production

# Cloudflare Turnstile
CLOUDFLARE_TURNSITE_SECRET_KEY=your-turnstile-secret-key
CLOUDFLARE_TURNSITE_SITE_KEY=your-turnstile-site-key
  1. 启动服务
# 开发模式
npm run dev

# 生产模式
npm start
  1. 访问应用 打开浏览器访问:http://localhost:3010

📖 使用指南

基本使用

  1. 选择内容类型

    • 📄 文本:输入任意文本内容
    • 🔗 网址:输入URL链接
    • 📶 Wi-Fi:配置网络名称、密码、安全类型
  2. 自定义样式

    • 调整二维码尺寸(200-600px)
    • 设置前景色和背景色
    • 上传Logo图标(可选)
  3. 生成二维码

    • 完成人机验证
    • 点击"生成二维码"按钮
    • 实时预览生成结果
  4. 导出二维码

    • 选择导出格式:PNG、SVG、PDF
    • 一键下载到本地
    • 支持自定义文件名

高级功能

Wi-Fi二维码配置

Wi-Fi二维码遵循标准格式,支持:

  • WPA/WPA2:最常用的安全类型
  • WEP:传统安全协议
  • 无密码:开放网络

格式示例:WIFI:T:WPA;S:网络名称;P:密码;;

加密通信流程

  1. 前端获取RSA公钥
  2. 生成AES会话密钥
  3. 使用RSA加密AES密钥
  4. 使用AES加密业务数据
  5. 后端RSA解密AES密钥
  6. 后端AES解密业务数据

🔧 API文档

生成二维码接口

POST /api/generate

请求格式(加密):

{
  "encrypted": "加密后的JSON字符串"
}

解密后数据结构

{
  "text": "二维码内容",
  "color": "#000000",
  "bgColor": "#FFFFFF",
  "size": 300,
  "type": "text|url|wifi",
  "format": "png|svg|pdf",
  "turnstileToken": "人机验证token"
}

响应格式

{
  "success": true,
  "data": {
    "qrCode": "base64编码的二维码图像",
    "format": "png",
    "size": 300
  }
}

获取公钥接口

GET /api/public-key

响应格式

{
  "success": true,
  "publicKey": "RSA公钥PEM格式"
}

🎨 界面预览

桌面端界面

  • 左右分栏布局
  • 左侧输入配置区域
  • 右侧实时预览区域
  • 现代化渐变背景

移动端适配

  • 垂直堆叠布局
  • 触摸友好的按钮
  • 响应式字体大小
  • 优化的触摸体验

🛡️ 安全最佳实践

部署建议

  1. 使用HTTPS:确保数据传输安全
  2. 配置防火墙:限制不必要的端口访问
  3. 定期更新:及时更新依赖包
  4. 监控日志:记录异常访问和错误

密钥管理

  1. 私钥保护

    • 不要提交到版本控制
    • 使用环境变量存储
    • 定期轮换密钥
  2. 访问控制

    • 配置CORS策略
    • 限制请求频率
    • 启用访问日志

🐛 故障排除

常见问题

问题1:二维码生成失败

  • 检查网络连接
  • 验证输入内容格式
  • 查看浏览器控制台错误

问题2:加密验证失败

  • 确认RSA密钥配置正确
  • 检查密钥格式(PEM格式)
  • 验证环境变量加载

问题3:人机验证不通过

  • 检查Turnstile配置
  • 确认站点密钥匹配
  • 查看Cloudflare控制台

调试模式

设置环境变量启用详细日志:

DEBUG=qrcode:*

📄 许可证

本项目采用 NCRPL v1.1 非商业性互惠公共许可证

许可证要点

  • 允许:非商业使用、修改、分发
  • 禁止:商业化使用、闭源分发
  • 🔄 要求:衍生作品需采用相同许可证
  • 📝 署名:必须保留原始版权声明

商业授权

如需商业使用,请联系项目维护者获取商业授权。

🤝 贡献指南

开发环境

  1. Fork 项目仓库
  2. 创建功能分支
  3. 使用eslint检查
  4. 提交代码变更
  5. 创建Pull Request

代码规范

  • 使用ESLint进行代码检查
  • 遵循Prettier格式化
  • 编写单元测试
  • 更新相关文档

测试

# 运行测试
npm lint

📊 性能指标

生成性能

  • 平均响应时间:< 500ms
  • 并发处理能力:100 req/s
  • 内存使用:< 100MB
  • CPU占用:< 10%

前端性能

  • 首屏加载:< 2s
  • 交互响应:< 100ms
  • 移动端优化:PWA支持
  • 缓存策略:智能缓存

⭐ 如果这个项目对你有帮助,请给我们一个star!

💡 有任何问题或建议,欢迎提交Issue或Pull Request

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages