#ifndef LICENSEMANAGER_H #define LICENSEMANAGER_H #include #include #include #include #include #include // ==================== 激活系统设计说明 ==================== // 激活文件后缀: .gal (Geton Again License) // 激活文件内容: 一行加密字符串 // 加密前格式: "UUID:数字密码" // // 加密方式(多层混淆): // 1. SHA256哈希校验头(8字节) // 2. XOR密钥加密 // 3. 非线性字节置换 (c * 7 + 13) % 256 // 4. 位置相关混淆 // 5. Base64编码 // // 验证流程: // 1. 读取激活文件,多层解密 // 2. 校验SHA256哈希确保完整性 // 3. 解析出UUID和密码 // 4. 对比UUID与本机真实UUID // 5. 验证密码是否等于程序内置密码 // =========================================================== class LicenseManager : public QObject { Q_OBJECT public: explicit LicenseManager(QObject *parent = nullptr); // 获取本机主板UUID static QString getMachineUUID(); // 获取激活文件路径 static QString getLicenseFilePath(); // 加密解密方法 static QString encrypt(const QString &plainText); static QString decrypt(const QString &encryptedText); // 生成激活码(供管理员/供应商使用,根据客户设备UUID生成) static QString generateActivationCode(const QString &uuid); // 读取并验证激活文件 static bool readAndVerifyLicense(); // 保存激活文件 static bool saveLicenseFile(const QString &activationCode); // 显示激活对话框 static bool showActivationDialog(QWidget *parent = nullptr); private: // 加密密钥 (XOR key) static const QByteArray encryptKey; // ========== 客户专用密码(根据客户修改此值) ========== // 不同客户使用不同的密码,写死在程序中 static const QString customerPassword; // ===================================================== }; // 激活对话框 class ActivationDialog : public QDialog { Q_OBJECT public: explicit ActivationDialog(QWidget *parent = nullptr); QString getServerAddress() const; QString getActivationCode() const; private slots: void onConfirmClicked(); private: void setupUI(); QLineEdit *serverEdit; QLineEdit *codeEdit; QPushButton *confirmBtn; QPushButton *cancelBtn; }; #endif // LICENSEMANAGER_H