成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Zephir編寫C動態擴展庫將PHP源代碼編譯加密

開發 前端
Zephir 使用PHP編譯器將源代碼編譯成二進制文件,這樣可以隱藏代碼邏輯和實現細節??梢园淹ㄓ脴I務類,都編譯成二進制拓展,對外只提供.so文件,也就不需要加密代碼了。

概述

PHP源代碼編譯加密通常是出于保護知識產權、防止源代碼泄露和被非法修改的目的。加密PHP源代碼可以使用先進的加密工具如Zend Guard或ionCube、使用代碼混淆技術、或開發自定義編譯擴展。

最關鍵的是,在加密的同時,確保服務器有相應的解密擴展來執行代碼,否則加密代碼將無法運行。換言之,加密和執行是一個密不可分的過程。本章節我們將主要展開討論使用Zephir語言編寫動態擴展庫進行代碼加密。

Zephir 使用PHP編譯器將源代碼編譯成二進制文件,這樣可以隱藏代碼邏輯和實現細節??梢园淹ㄓ脴I務類,都編譯成二進制拓展,對外只提供.so文件,也就不需要加密代碼了。

Zephir

Zephir是一個開源的高級語言(區別于匯編等機器語言),它的設計是為了減輕PHP原生擴展的創建難度和可維護性,另外還帶來了強類型與內存安全的支持。

Zephir是一門定位于大多數想通過編寫和編譯能夠被PHP執行的代碼的PHPer需求的語言。它是一種動態和靜態類型結合的語言,對于PHP來說,它的一些功能可能會感覺時曾相識。

應用

本章節使用個人倉庫 https://github.com/Tinywan/zephir-lang-php-extension 進行簡單實現一個業務代碼的認證授權加密代碼。

機密案例代碼

git clone https://github.com/Tinywan/zephir-lang-php-extension.git

目錄結構

.
  ├── zephirencrypt                   -- 加密擴展庫目錄
  │   ├── Auth
  │   │   └── License.zep         -- 權限認證
  │   ├── Common
  │   │   └── AbstractModule.zep -- 模塊抽象類
  │   └── Module                  -- 業務模塊目錄
  │       └── LiveModule.zep            
  ├── config.json                 -- 編譯擴展配置文件
  └── ext                         -- 編譯生成的.so文件

授權許可證License.zep

/**
 * @desc 授權許可證
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/6/16 20:14
 */
namespace ZephirEncrypt\Auth;

class License
{
    /**
     * @desc 授權認證
     * @author Tinywan(ShaoBo Wan)
     */
    public static function check(string service_uuid, string auth_license, int uid = 0, int rand = 0)
    {
        var private_key = "tinywan2024";
        var expire_time = substr(auth_license, 0, 10);
        var current_time = time();
        var sequest_hash_value = substr(auth_license, -32);
        var res_hash_value = md5(service_uuid . "-" . expire_time . "-" . rand . "-" . uid . "-" . private_key);

        if expire_time < current_time {
            return -1;
        }

        if sequest_hash_value != res_hash_value {
            return 0;
        }
        return 1;
    }
}

業務模塊抽象類AbstractModule.zep

/**
 * @desc 抽象業務模塊
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/6/16 20:14
 */
namespace ZephirEncrypt\Common;
use ZephirEncrypt\Auth\License;

abstract class AbstractModule
{
    protected service_uuid;

    protected auth_license;

    /** 1 true , 0 false */
    public auth_status = 0;

    /**
    * @desc 構架函數
    * @author Tinywan(ShaoBo Wan)
    */
    public function __construct(string service_uuid, string auth_license)
    {
        let this->service_uuid = service_uuid;
        let this->auth_license = auth_license;
        var checkRes = License::check(this->service_uuid, this->auth_license);
        if checkRes == -1 {
            let this->auth_status = -1;
        }

        if checkRes == 0 {
            let this->auth_status = 0;
        }

        if checkRes == 1 {
            let this->auth_status = 1;
        }
    }

    /** 獲取權限狀態 */
    abstract public function getAuthStatus();
}

直播業務模塊LiveModule.zep

/**
 * @desc 直播業務模塊
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/6/16 20:14
 */
namespace ZephirEncrypt\Module;
use ZephirEncrypt\Common\AbstractModule;

class LiveModule extends AbstractModule
{
    /**
     * @desc 構架函數
     * @author Tinywan(ShaoBo Wan)
     */
    final public function __construct(string service_uuid, string auth_license)
    {
        parent::__construct(service_uuid, auth_license);
    }

    /**
    * @desc 獲取權限狀態
    * @author Tinywan(ShaoBo Wan)
    */
    public function getAuthStatus()
    {
        return $this->auth_status;
    }

    /**
     * @desc 業務測試
     * @author Tinywan(ShaoBo Wan)
     */
    public function start()
    {
        var res = [];
        if this->auth_status != 1 {
            let res = ["code":this->auth_status, "msg":"no permission to access"];
            return json_encode(res);
        }
        echo "直播開始成功..............";
        echo "這里開始寫你的業務代碼.....";
        echo "這里開始寫你的業務代碼.....";
        echo "這里開始寫你的業務代碼.....";
    }
}

編譯并生成擴展

cd zephir-lang-php-extension/

# 進入加密擴展庫目錄
cd zephirencrypt

編譯并生成擴展

zephir build

如果一切順利,您將在輸出的末尾看到以下消息:

zephir-lang-php-extension/zephirencrypt# zephir build
 Cleaning old kernel files...
 Copying new kernel files...
 Preparing for PHP compilation...
 Preparing configuration file...
 Compiling...
 Zephir version has changed, use "zephir fullclean" to perform a full clean of the project
 Installing...

 Extension installed.
 Add "extension=zephirencrypt.so" to your php.ini

 ! [NOTE] Don't forget to restart your web server

在上面的步驟中,您可能需要提供root密碼才能安裝擴展。

最后,必須將擴展添加到php.ini才能由PHP加載。這是通過添加初始化指令:extension=zephirencrypt.so來實現的。

注意:您也可以在命令行中使用-d extension=zephirencrypt.so加載它,但它只會為單個請求加載,因此每次您想要在CLI中測試擴展時都需要包含它。將指令添加到php.ini將確保從那時起為每個請求加載它。

測試

現在擴展已添加到您的 php.ini 中,請執行以下命令檢查擴展是否正確加載:

php -m


[PHP Modules]
apcu
....
zephir_parser
zephirencrypt
...
[Zend Modules]

擴展名zephirencrypt應該是表明擴展名已正確加載。

如何使用

新建測試文件zephir.php

<?php
/**
 * @desc zephir.php 描述信息
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/8/5 22:51
 */
declare(strict_types=1);

$serviceUuid = "13c7c8e1-3ac2-41a6-95dc-ff954b431bbf";
$authLicense = "1728869954-0-0-eabfb0fb52c429d4fa037585f7afd512";

$liveModule = new \ZephirEncrypt\Module\LiveModule($serviceUuid, $authLicense);
print_r($liveModule);

$res = $liveModule->start();
var_dump($res);

以上授權碼時間為1528869954 ,即:2018-06-13 14:05:54,預期結果是該授權碼已過期,執行代碼預期結果

ZephirEncrypt\Module\LiveModule Object
(
    [service_uuid:protected] => 13c7c8e1-3ac2-41a6-95dc-ff954b431bbf
    [auth_license:protected] => 1528869954-0-0-eabfb0fb52c429d4fa037585f7afd512
    [auth_status] => -1
)

可以看到此時授權碼狀態是-1表示授權碼過期。嘗試授權碼為未來某一天1788689954 ,即:2026-09-06 18:19:14

$authLicense = "1788689954-0-0-eabfb0fb52c429d4fa037585f7afd512";

預期結果相同

ZephirEncrypt\Module\LiveModule Object
(
    [service_uuid:protected] => 13c7c8e1-3ac2-41a6-95dc-ff954b431bbf
    [auth_license:protected] => 1788689954-0-0-eabfb0fb52c429d4fa037585f7afd512
    [auth_status] => 0
)

正確的授權碼

ZephirEncrypt\Module\LiveModule Object
(
    [service_uuid:protected] => 13c7c8e1-3ac2-41a6-95dc-ff954b431bbf
    [auth_license:protected] => 178909089954-0-0-eabfb0fb52c429d4fa037585f7afd512
    [auth_status] => 1
)
string(42) "直播開始成功............."
string(42) "這里開始寫你的業務代碼...."
string(42) "這里開始寫你的業務代碼...."
string(42) "這里開始寫你的業務代碼...."
責任編輯:武曉燕 來源: 開源技術小棧
相關推薦

2024-08-07 08:14:26

2009-12-08 13:18:17

2010-01-14 10:42:08

C++源代碼

2020-11-13 13:05:27

Java開發代碼

2023-12-28 07:57:27

2022-06-09 09:54:45

編譯軟件開發

2010-02-04 09:10:04

Linux PHP

2010-01-11 15:47:37

C++編譯

2016-01-06 09:57:23

編寫PHP擴展

2010-06-10 10:22:56

Chrome 源代碼擴展同步

2021-08-18 08:00:00

Emscripten開發技術

2021-07-07 05:53:23

PythonPython 語法加密源代碼

2009-03-11 11:32:10

JavaJava安全加密技術

2010-01-14 14:40:21

C++代碼

2009-11-27 10:32:35

2013-12-10 10:53:47

shellcode

2009-11-25 10:16:49

linuxphpizePHP

2009-08-27 16:29:18

C#動態編譯

2010-02-04 13:19:41

Linux Nginx

2010-03-01 15:55:00

Fedora Eva
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成人毛片 | 成人在线视频网站 | 波多野结衣在线观看一区二区三区 | 久久久精品久久久 | 国产成人一区二区三区久久久 | 亚洲自拍偷拍av | 四虎影视 | 欧美黄色小视频 | 国产日屁 | 国产精品久久久久久久久久免费看 | 欧美性猛交一区二区三区精品 | aaa精品| 黄色在线 | 亚洲国产精品一区 | 99精品国产一区二区三区 | 免费观看黄色片视频 | 免费午夜剧场 | 久久久成人一区二区免费影院 | 最新av在线网址 | 久久夜视频 | 日本精品视频在线观看 | 日韩av最新网址 | 欧美视频免费 | 91在线看 | 国产激情视频网址 | 超碰在线网站 | 久久久这里只有17精品 | 中文精品视频 | 成人免费淫片aa视频免费 | 91中文在线观看 | 国产视频第一页 | 日韩中文字幕在线视频观看 | 欧美激情区 | 日本在线看片 | 久久国产一区二区三区 | 伊人精品在线 | 中文字幕在线一 | av在线播放不卡 | 免费黄色片在线观看 | 男人天堂色| 91啪影院|