当前位置:首页 > 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 文件可能包含以下信息:

php软件license实现

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

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

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

相关文章

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE ord…

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT PR…

php 链表实现

php 链表实现

在 PHP 中实现链表可以通过类来模拟链表节点(Node)和链表(LinkedList)结构。以下是链表的完整实现示例,包含基础操作如插入、删除、遍历等。 链表节点类(Node) 链表的基本单元是节…

php session实现购物车

php session实现购物车

PHP Session 实现购物车 初始化 Session 确保在使用 Session 前调用 session_start() 函数。通常放在 PHP 文件的最顶部。 <?php sessio…

php实现重定向

php实现重定向

使用header函数进行重定向 在PHP中,header()函数是实现重定向的常用方法。通过发送HTTP头信息Location,浏览器会自动跳转到指定URL。需确保在调用header()前没有输出任何…