# Toolset **Repository Path**: devqiaoyu/toolset ## Basic Information - **Project Name**: Toolset - **Description**: 使用 Go 语言实现的一些工具服务集合 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-25 - **Last Updated**: 2025-11-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Toolset - 多工具集合 这是一个用Go语言编写的多工具集合应用,目前包含以下工具: 1. License Service - 许可证管理工具 2. JSON Encryption Tool - JSON文件加解密工具 ## 🔒 最新更新 (v2.0 安全增强版) ### 重大安全改进 ✨ **AES加密敏感数据**:过期时间和管理员权限现在使用AES-256-CBC加密存储 🔐 **硬件绑定加密**:加密密钥与硬件指纹绑定,确保许可证无法在其他设备使用 🛡️ **防篡改设计**:敏感信息不再以明文形式存储,提供更强的安全保护 🔍 **多层验证**:硬件指纹→RSA签名→AES解密→权限检查→时间验证的五重安全机制 📱 **跨平台兼容**:与TypeScript版本保持一致的安全标准和硬件指纹算法 ### 升级提醒 ⚠️ **重要**:新版本许可证格式已更新,旧版本许可证需要重新生成以获得安全保护 --- ## 目录结构 ``` toolset/ ├── cmd/ │ ├── toolset/ # 主程序入口 │ └── encryption-tool/ # 加密工具入口 ├── config/ # 配置文件和密钥 ├── internal/ # 内部包 │ ├── encryption/ # 加密功能模块 │ ├── hardware/ # 硬件信息获取模块 │ ├── license/ # 许可证处理模块 │ └── utils/ # 工具函数模块 ├── go.mod # Go模块定义 ├── go.sum # Go依赖校验和 ├── Makefile # 构建脚本 ├── config.json # 配置文件 ├── Dockerfile # Docker配置文件 └── README.md # 说明文档 ``` ## 可用工具 ### 1. License Service 许可证管理工具,采用高安全性设计,包含以下功能: - 获取硬件信息 - 生成许可证(支持AES加密敏感数据) - 验证许可证(多层安全校验) - 批量许可证生成 #### License Service 功能说明 ##### 获取硬件信息 - 支持Windows、Linux和macOS系统 - 获取CPU ID、CPU名称和MAC地址 - 生成基于硬件特征的唯一指纹(SHA256哈希) ##### 生成许可证 - **硬件绑定**:基于硬件信息生成唯一指纹(格式:MAC地址-CPU ID-CPU名称) - **敏感数据加密**:使用AES-256-CBC加密过期时间和管理员标识 - **RSA数字签名**:使用2048位RSA私钥对许可证进行签名 - **防篡改设计**:敏感信息不以明文形式存储 - 支持设置过期时间和管理员权限 - 支持公网IP绑定(可选) ##### 验证许可证(多层安全校验) 1. **硬件指纹验证**:确保许可证与当前硬件匹配 2. **RSA签名验证**:验证许可证完整性和真实性 3. **AES解密验证**:解密并验证敏感数据 4. **管理员权限检查**:优先验证管理员账号 5. **过期时间检查**:验证许可证是否在有效期内 ##### 安全特性 - **加密存储**:过期时间和管理员标识使用AES-256-CBC加密 - **硬件绑定**:加密密钥与硬件指纹绑定,无法在其他设备解密 - **防篡改**:任何许可证内容的修改都会导致签名验证失败 - **随机IV**:每次加密使用不同的初始化向量 - **PKCS7填充**:标准化数据填充机制 ### 2. JSON Encryption Tool JSON文件加解密工具,提供安全的JSON文件加密和解密功能: #### 功能特性 - 使用AES-256-CBC模式进行加密 - 使用PBKDF2进行密钥派生 - 使用随机生成的盐值和IV - 支持任意JSON文件的加密和解密 - 使用Base64编码存储加密数据 #### 加密文件格式 ```json { "salt": "base64编码的盐值", "iv": "base64编码的初始化向量", "ciphertext": "base64编码的加密数据" } ``` #### 使用方法 有两种方式使用加密工具: 1. 命令行工具: ```bash # 加密JSON文件 ./build/encryption-tool encrypt original.json encrypted.json password # 解密JSON文件 ./build/encryption-tool decrypt encrypted.json decrypted.json password ``` 2. Web界面: 访问 http://localhost:8080/encryption 使用图形界面进行加密和解密操作: - 上传JSON文件或粘贴JSON内容 - 输入密码 - 点击加密或解密按钮 - 下载处理结果 ## 快速开始 ### 安装依赖 ```bash make deps ``` ### 构建项目 ```bash make build ``` ### 运行服务 ```bash make run ``` 或者直接运行构建后的二进制文件: ```bash ./build/toolset ``` ### 使用加密工具 ```bash # 加密文件 ./build/encryption-tool encrypt input.json encrypted.json mypassword # 解密文件 ./build/encryption-tool decrypt encrypted.json output.json mypassword ``` ### 访问主页 主页面: http://localhost:8080/ License工具页面: http://localhost:8080/license 加密工具页面: http://localhost:8080/encryption ## API接口 ### 获取硬件信息 ``` GET /api/license/generate ``` ### 生成许可证 ``` POST /api/license/generate ``` 请求体示例: ```json { "cpuId": "CPU标识", "cpuName": "CPU名称", "macAddress": "MAC地址", "publicIp": "公网IP(可选)", "expiryDate": "过期日期(格式:YYYY-MM-DD)", "admin": false } ``` 响应示例: ```json { "status": 200, "message": "License生成成功", "data": { "hardwareHash": "56b13e4a2cbedec4ec036df97ef232c2657e702881d4bbab20f3a8c1e134d391", "encryptedExpiry": "d209d11e99a56c21816b9bdbf4ca2329:1853ecf7eeea68a9a506e06508a6db7f...", "signature": "mJl3xjA4PnCOjwmJk8DR47JZ/cEZltjvRUQzi6D/cux2gCUYM5ikcxuACJPHYZ6b..." } } ``` ### 验证许可证 ``` GET /api/license/status ``` 响应示例(有效许可证): ```json { "status": 200, "message": "许可证校验通过", "data": { "valid": true, "reason": "许可证校验通过" } } ``` 响应示例(管理员许可证): ```json { "status": 200, "message": "管理员账号", "data": { "valid": true, "reason": "管理员账号" } } ``` 响应示例(无效许可证): ```json { "status": 403, "message": "硬件指纹不匹配", "data": { "valid": false, "reason": "硬件指纹不匹配" } } ``` ### 加密JSON数据 ``` POST /api/encryption/encrypt ``` 请求体示例: ```json { "data": "原始JSON内容", "password": "加密密码" } ``` ### 解密JSON数据 ``` POST /api/encryption/decrypt ``` 请求体示例: ```json { "data": "加密的JSON内容", "password": "解密密码" } ``` ## 配置文件 项目使用`config.json`作为配置文件,可以配置服务端口等参数。 ## 证书文件 - `config/private.pem`: 私钥文件,用于签名许可证 - `config/public.pem`: 公钥文件,用于验证许可证 ### 密钥生成 许可证系统使用RSA-2048位密钥对进行数字签名: 1. 生成RSA私钥(PKCS#8格式): ```bash # 生成PKCS#8格式的私钥(推荐) openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out config/private.pem # 或者从传统格式转换为PKCS#8格式 openssl rsa -in old_private.pem -out config/private.pem -pkcs8 ``` 2. 从私钥提取公钥: ```bash openssl rsa -in config/private.pem -pubout -out config/public.pem ``` #### 密钥安全要求 - **私钥保护**:私钥文件应设置适当的文件权限(如600) - **密钥强度**:使用2048位或更高强度的RSA密钥 - **存储安全**:私钥应存储在安全的位置,避免泄露 - **备份策略**:建议安全备份密钥对,以防丢失 ## 许可证文件 ### 新版许可证格式(安全加密版本) 生成的许可证会保存为`license.json`文件,采用安全加密设计: ```json { "hardwareHash": "硬件指纹SHA256哈希值", "encryptedExpiry": "IV:加密的过期时间和管理员信息", "signature": "RSA数字签名" } ``` #### 字段说明 - **hardwareHash**: 基于MAC地址、CPU ID、CPU名称生成的SHA256哈希值 - **encryptedExpiry**: 使用AES-256-CBC加密的敏感数据,包含: - 过期时间(ISO 8601格式) - 管理员标识(布尔值) - 格式:`十六进制IV:十六进制加密数据` - **signature**: 使用RSA-2048私钥对许可证数据的数字签名 #### 安全优势 ✅ **敏感信息保护**:过期时间和管理员权限不再以明文存储 ✅ **防篡改**:任何修改都会导致签名验证失败 ✅ **硬件绑定**:许可证只能在生成时的硬件上使用 ✅ **加密安全**:使用工业标准AES-256-CBC加密算法 ### 兼容性说明 为确保系统安全性,新版本使用加密存储敏感信息。如果您有旧格式的许可证文件,请重新生成新的安全许可证。 ## 故障排除 ### 许可证相关问题 #### 1. 许可证生成失败 **问题**:提示“读取私钥或签名失败” **解决方案**: - 检查`config/private.pem`文件是否存在 - 确认私钥文件格式为PKCS#8(使用上述命令生成) - 检查文件权限,确保应用可以读取私钥文件 #### 2. 许可证验证失败 **问题**:提示“硬件指纹不匹配” **解决方案**: - 确认在相同设备上进行验证 - 检查网络配置是否发生变化(MAC地址) - 如果使用了公网IP绑定,确保公网IP未变化 **问题**:提示“许可证签名无效” **解决方案**: - 检查`config/public.pem`文件是否存在 - 确认公私钥对匹配 - 检查许可证文件是否被篡改 **问题**:提示“许可证格式错误或已损坏” **解决方案**: - 这可能是旧版本许可证,请重新生成 - 检查JSON文件格式是否正确 - 确认加密数据未被损坏 #### 3. 硬件信息获取失败 **问题**:无法获取硬件信息 **解决方案**: - **Windows**:确保PowerShell可用且有适当权限 - **Linux**:确保具有读取`/proc/cpuinfo`和`/sys/class/net/`的权限 - **macOS**:确保`sysctl`和`networksetup`命令可用 ### 加密工具相关问题 #### 1. 加密/解密失败 **问题**:提示“密码错误” **解决方案**: - 确认输入的密码正确 - 检查是否有隐藏字符或空格 **问题**:提示“JSON格式错误” **解决方案**: - 验证输入的JSON数据格式正确 - 使用JSON验证工具检查语法 ### 服务启动问题 #### 1. 端口被占用 **问题**:提示“bind: address already in use” **解决方案**: ```bash # 查找占用端口的进程 lsof -i :8080 # 终止进程或使用不同端口 PORT=8081 ./build/toolset ``` #### 2. 权限问题 **问题**:提示“permission denied” **解决方案**: ```bash # 给可执行文件添加执行权限 chmod +x ./build/toolset # 设置私钥文件权限 chmod 600 config/private.pem chmod 644 config/public.pem ``` --- ## 扩展新工具 要添加新工具,请按照以下步骤操作: 1. 在`internal/`目录下创建新工具的包,例如`internal/calculator/` 2. 在新包中实现工具功能 3. 在`cmd/toolset/main.go`中导入新工具包 4. 在`setupRoutes`函数中添加新工具的路由设置函数 5. 实现新工具的路由处理函数 示例: ```go // 在main.go中添加新工具 import ( "license-service/internal/license" "license-service/internal/calculator" // 新工具包 ) func setupRoutes(r *gin.Engine) { // 设置license工具路由 setupLicenseRoutes(r) // 设置新工具路由 setupCalculatorRoutes(r) } func setupCalculatorRoutes(r *gin.Engine) { api := r.Group("/api/calculator") { api.POST("/add", addHandler) api.POST("/subtract", subtractHandler) } } func addHandler(c *gin.Context) { // 实现加法功能 } func subtractHandler(c *gin.Context) { // 实现减法功能 } ``` 通过这种方式,您可以轻松地向工具集中添加新工具,同时保持代码结构清晰和可维护性。