当前位置:首页 > PHP

php软件license实现

2026-02-16 13:36:27PHP

PHP 软件 License 实现方法

在 PHP 中实现软件 License 验证通常涉及生成、验证和管理许可证密钥。以下是几种常见的实现方式:

基于加密算法的 License 生成与验证

使用加密算法(如 AES、RSA)生成和验证 License 密钥:

// 生成 License 密钥
function generateLicense($data, $secretKey) {
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
    $encrypted = openssl_encrypt($data, 'aes-256-cbc', $secretKey, 0, $iv);
    return base64_encode($iv . $encrypted);
}

// 验证 License 密钥
function validateLicense($license, $secretKey) {
    $data = base64_decode($license);
    $iv = substr($data, 0, openssl_cipher_iv_length('aes-256-cbc'));
    $encrypted = substr($data, openssl_cipher_iv_length('aes-256-cbc'));
    return openssl_decrypt($encrypted, 'aes-256-cbc', $secretKey, 0, $iv);
}

基于数字签名的 License 验证

使用公钥/私钥对 License 进行签名和验证:

// 生成签名
function signLicense($data, $privateKey) {
    openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);
    return base64_encode($signature);
}

// 验证签名
function verifyLicense($data, $signature, $publicKey) {
    $signature = base64_decode($signature);
    return openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256) === 1;
}

基于时间限制的 License

实现有效期限制的 License:

function checkLicenseExpiry($licenseData) {
    $currentTime = time();
    $expiryTime = strtotime($licenseData['expiry_date']);
    return $currentTime < $expiryTime;
}

基于硬件绑定的 License

将 License 与特定硬件信息绑定:

function getHardwareFingerprint() {
    $mac = exec('getmac');
    $cpu = exec('wmic cpu get ProcessorId');
    return md5($mac . $cpu);
}

function validateHardware($licenseHardwareId) {
    return $licenseHardwareId === getHardwareFingerprint();
}

完整的 License 验证流程示例

class LicenseManager {
    private $publicKey = '...'; // 公钥
    private $secretKey = '...'; // AES密钥

    public function validate($licenseFile) {
        $licenseData = json_decode(file_get_contents($licenseFile), true);

        if (!$this->verifySignature($licenseData['data'], $licenseData['signature'])) {
            return false;
        }

        $decryptedData = $this->decryptData($licenseData['data']);
        $licenseInfo = json_decode($decryptedData, true);

        if (!$this->checkExpiry($licenseInfo) || !$this->checkHardware($licenseInfo)) {
            return false;
        }

        return $licenseInfo;
    }

    private function verifySignature($data, $signature) {
        // 实现数字签名验证
    }

    private function decryptData($data) {
        // 实现数据解密
    }

    private function checkExpiry($licenseInfo) {
        // 检查有效期
    }

    private function checkHardware($licenseInfo) {
        // 检查硬件绑定
    }
}

云端 License 验证

实现与服务器通信的 License 验证:

function validateWithServer($licenseKey) {
    $url = 'https://license.yourdomain.com/validate';
    $data = ['license_key' => $licenseKey, 'hw_id' => getHardwareFingerprint()];

    $options = [
        'http' => [
            'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
            'method'  => 'POST',
            'content' => http_build_query($data)
        ]
    ];

    $context = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

    return json_decode($result, true)['valid'] ?? false;
}

License 文件结构示例

典型的 License 文件可能包含以下信息:

{
    "license_key": "ENCryptedDATA...",
    "customer": "Company Name",
    "expiry_date": "2023-12-31",
    "features": ["feature1", "feature2"],
    "signature": "DIGITALsignature..."
}

这些方法可以单独使用或组合使用,具体取决于软件的安全需求和分发模式。对于商业软件,建议结合多种验证方式以提高安全性。

php软件license实现

标签: 软件php
分享给朋友:

相关文章

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'loca…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searc…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…