php 实现license授权
PHP 实现 License 授权的方法
使用加密算法生成 License
PHP 可以通过加密算法(如 AES、RSA)生成 License 文件或字符串。以下是一个使用 AES 加密生成 License 的示例:
<?php
function generateLicense($data, $key) {
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv);
return base64_encode($iv . $encrypted);
}
$licenseData = json_encode(['expiry' => '2025-12-31', 'user' => 'example']);
$secretKey = 'your-secret-key-32-chars-long';
$license = generateLicense($licenseData, $secretKey);
echo $license;
?>
验证 License 的有效性
验证 License 时需要解密并检查内容(如过期时间、用户信息等):

<?php
function validateLicense($license, $key) {
$data = base64_decode($license);
$ivLength = openssl_cipher_iv_length('aes-256-cbc');
$iv = substr($data, 0, $ivLength);
$encrypted = substr($data, $ivLength);
$decrypted = openssl_decrypt($encrypted, 'aes-256-cbc', $key, 0, $iv);
if ($decrypted === false) {
return false;
}
$licenseInfo = json_decode($decrypted, true);
return $licenseInfo['expiry'] >= date('Y-m-d');
}
$isValid = validateLicense($license, $secretKey);
echo $isValid ? 'Valid License' : 'Invalid License';
?>
使用数字签名确保 License 完整性
结合 RSA 签名可以防止 License 被篡改:

<?php
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;
}
$privateKey = openssl_pkey_get_private('file://path/to/private.key');
$publicKey = openssl_pkey_get_public('file://path/to/public.key');
$signature = signLicense($licenseData, $privateKey);
$isVerified = verifyLicense($licenseData, $signature, $publicKey);
?>
绑定 License 到特定机器或域名
通过获取服务器或客户端的唯一标识(如 MAC 地址、域名)并嵌入 License 中:
<?php
function getServerFingerprint() {
return md5($_SERVER['SERVER_NAME'] ?? gethostname());
}
$licenseData = json_encode([
'expiry' => '2025-12-31',
'fingerprint' => getServerFingerprint()
]);
?>
定期检查 License 状态
在应用启动或定时任务中验证 License:
<?php
function checkLicense() {
$licenseFile = 'path/to/license.key';
$license = file_get_contents($licenseFile);
if (!validateLicense($license, $secretKey)) {
exit('License expired or invalid');
}
}
checkLicense();
?>






