背景:在商用的情况下 可能需要加密 php 源码

php-beast 是一个 PHP 源码加密的模块,其使用 DES 算法加密,用户可以自定义加密的 key 来加密源代码,可以很好的保护你的代码。主要应用情景有:1) 代码放在虚拟主机上,有泄漏源码的危险。2) 商业保护,当项目需要收费时就可以加密你的代码不被修改。

选择收费的 缺点是 需要花钱,但是可能加密性好一点,在性能方面会好一点

700粉丝福利安排一波,工作中准备的,大家随便拿

【社群福利】30G-PHP进阶资料,助力大家都能30K

选择开源的 优点不需要 花钱,可能安全性或者性能比不上收费的

选择 php-beast 为 php 一个扩展,可以方便快捷为 php 代码进行加密处理

有这几个特点

提供只能在指定的机器上运行的功能。要使用此功能可以在 networkcards.c 文件添加能够运行机器的网卡号

代码使用可以设置有效期,超过这个有效期代码就不能使用了

可以自定义修改默认的的密钥,提高了被盗取的可靠性

源码:liexusong/php-beast 可以参照文档

注意如果系统有多个 php 版本,安装方法有所不同,需要安装扩展到对应的 php 版本 例子 博客:多 PHP 版本共存的环境下安装 Swoole 到指定版本

Linux 系统安装 步骤 1 (注意需要 root 安装保证权限)

$ wget https://github.com/liexusong/php-beast/archive/master.zip
$ unzip master.zip
$ cd php-beast-master
$ phpize
$ ./configure
$ sudo make && make install

编译好之后修改 php.ini 配置文件(可能 php.ini 配置 有 cli 和 fpm)cli 就命令行运行 php, 加入配置项: extension=beast.so, 重启 php-fpm

systemctl restart php-fpm

加密方案 进入 php-beast-master/tool/ 目录配置 configure.ini 文件

#source path
src_path = ""#destination path 加密的php 放到的目录
dst_path = ""#expire time 源码使用有效期
expire = "2021-02-13 14:48:12"#encrypt type 加密类型 可以有 selection: DES, AES, BASE64
encrypt_type = "DES"

进入 php-beast-master/tool/ 执行 php encode_files.php,加密后的结果

可以定制修改 默认的加密源码这个不容易给破解

修改加密后的文件头结构:打开 header.c 文件,找到以下代码:

char encrypt_file_header_sign[] = {0xe8, 0x16, 0xa4, 0x0c,0xf2, 0xb2, 0x60, 0xee
};

int encrypt_file_header_length = sizeof(encrypt_file_header_sign);

自定义修改以下代码(其中的数字的范围为:0-8,字母的范围为:a-f):

0xe8, 0x16, 0xa4, 0x0c,
0xf2, 0xb2, 0x60, 0xee

修改 aes 模块加密 key:

打开 php-beast-master/aes_algo_handler.c 文件,找到以下代码:

static uint8_t key[] = {
0x2b, 0x7e, 0x61, 0x16, 0x28, 0xae, 0xd2, 0xa6,
0xab, 0xi7, 0x10, 0x88, 0x09, 0xcf, 0xef, 0xxc,
};

自定义修改以下代码(其中的数字的范围为:0-8,字母的范围为:a-f):

0x3b, 0x7d, 0x61, 0x16, 0x28, 0xae, 0xd2, 0xa6,
0xab, 0xi7, 0x10, 0x88, 0x49, 0xcf, 0xef, 0xxc,

修改 des 模块加密 key:

打开 php-beast-master/des_algo_handler.c 文件,找到以下代码

static char key[8] = {0x01, 0x1f, 0x01, 0x1f,0x01, 0x0e, 0x01, 0x0e,
};
// 修改以 {} 里面的代码(其中的数字的范围为:0-8,字母的范围为:a-f):

加密前 和 加密后的时间的对比

测试工具 ab,10 个线程发起 100 次请求

  1. 代码没有加密
$stime=microtime(true); //获取程序开始执行的时间
$a = 0;
for($i=0;$i<5000000;$i++){$a=$a*$i;
}
$etime=microtime(true);//获取程序执行结束的时间
$total=$etime-$stime;   //计算差值
echo "<br />[页面执行时间:{$total} ]秒";

在 linux 执行命令 源码没有加密的情况

$ ab -n 100 -c 10 http://106.53.5.168:8800/testTime.php

结果 一共使用了 3.880 秒

加密后的代码

斤¬`'檁<Sy::bkR¥ԧAd0թγ 6{¥֩80ߋ²k*8.\ /þ;==h]rx4N¿ϊ꿏0£²v|ⓡ_}ʁ«½¿aĹ稖g¼a¿u·q  3dSR    ¤1r¢zNu¡Vjq    ē7M ¤*[root@localhost public]# Xshell

在 linux 执行命令 源码加密的情况

$ ab -n 100 -c 10 http://106.53.5.168:8800/testTimeEncode.php

结果是:使用了 4.114 秒,比没有加密的情况慢了 0.3 秒左右

注意 使用了 php-beast 之后性能不会下降,而且会有所提升。

主要原因是 php-beast 缓存了解密后的代码,所以二次访问时不会再进行解密操作,所以会比原来读文件更快。另外设置较大的缓存效率会更好,可以通过 beast.cache_size 配置项来设置。

在 php.ini 文件 增加缓存设置

beast.cache_size=100m

重启 pfm

$ systemctl restart php-fpm

再次执行

$  ab -n 100 -c 10 http://106.53.5.168:8800/testTimeEncode.php

结果:执行结果是 3.858 秒 比原来没有加密 3.880 快了 0.03 秒

大厂必备面试题,来拿吧!

PHP经典面试题集(含答案)

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的官方群点击此处。 喜欢我的文章就点赞关注吧

PHP 源码加密学习相关推荐

  1. rust墙壁升级点什么_分享:如何在阅读Rust项目源码中学习

    今天做了一个Substrate相关的小分享,公开出来. 因为我平时也比较忙,昨天才选定了本次分享的主题,准备比较仓促,细节可能不是很充足,但分享的目的也是给大家提供一个学习的思路,更多的细节大家可以在 ...

  2. 跟大家聊聊我们为什么要学习源码?学习源码对我们有用吗?(源码感悟)

    来自:源码笔记 1 前言 由于现在微服务很流行,越来越多企业采用了SpringCloud微服务架构,而SpringBoot则是快速构建微服务项目的利器.于是笔者以此为切入点,将SpringBoot作为 ...

  3. beast linux加密,PHP-Beast v2.2发布,PHP源码加密扩展

    PHP-Beast v2.2发布,PHP源码加密扩展 发布时间:2016-07-08 14:53:04来源:红联作者:baihuo PHP-Beast v2.2 发布了,此版本主要增加了以下功能: 加 ...

  4. PHP:使用Zend对源码加密、Zend Guard安装以及Zend Guard Run-time support missing的解决方法

    PHP:使用Zend对源码加密.Zend Guard安装以及Zend Guard Run-time support missing的解决方法 参考文章: (1)PHP:使用Zend对源码加密.Zend ...

  5. 为什么要学习源码?学习源码对我们有用吗?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1 前言 由于现在微服务很流行,越来越多企业采用了Spr ...

  6. STL源码剖析学习七:stack和queue

    STL源码剖析学习七:stack和queue stack是一种先进后出的数据结构,只有一个出口. 允许新增.删除.获取最顶端的元素,没有任何办法可以存取其他元素,不允许有遍历行为. 缺省情况下用deq ...

  7. MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法

    说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都在它的源码 ...

  8. 「从源码中学习」面试官都不知道的Vue题目答案

    前言 当回答面试官问及的Vue问题,我们除了照本宣科的回答外,其实还可以根据少量的源码来秀一把,来体现出你对Vue的深度了解. 本文会陆续更新,此次涉及以下问题: "new Vue()做了什 ...

  9. caffe源码c++学习笔记

    转载自:深度学习(七)caffe源码c++学习笔记 - hjimce的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/hjimce/article/details/ ...

最新文章

  1. 想知道spring boot+cloud+docker的微服务体系架构如何使用吗?
  2. C++ vector的内部实现原理及基本用法
  3. pdf.js 在线阅读PDF
  4. Java设计模式(学习整理)---策略模式
  5. 数据挖掘竞赛-员工离职预测训练赛
  6. python调用webservice接口实例_python调用webservice接口的实现
  7. 15行Python代码,帮你理解令牌桶算法
  8. leetcode181. 超过经理收入的员工(SQL)
  9. VS2008下直接安装使用Boost库1 46 1版本
  10. 虚幻4属性系统(反射)翻译
  11. 第十一周学习进度报告
  12. 数据结构与算法(js)
  13. Web页面自动化执行,Java+Selenium3.0-Mac OS环境搭建
  14. Linux Qt入门:工程构建笔记一
  15. Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性  应该内置到语言里面
  16. mysql有rollup函数_如何在MySQL ROLLUP函数中替换NULL类别标题?
  17. Vmware中桥接无法获取IP
  18. Mac Ps cc2017 下载
  19. 【NDN实验】ndnSIM: NDN simulator for NS-3 全文翻译
  20. 【Python】批量移动同类型文件到其他文件夹的办公技巧

热门文章

  1. 动态路由原理(RIP协议+实验)
  2. Nexus 7 二代 刷机
  3. 开源书籍和网站:free-programming-books
  4. 耐高温轴承1000度_耐高温轴承介绍——SIAIF耐高温轴承
  5. Ubuntu系统的备份与恢复
  6. 禁用迅雷的浏览器支持
  7. 想要安装pdf虚拟打印机64位应如何实现
  8. [数组公式] 数组公式
  9. jedis连接redis失败解决
  10. 这样的老板,真想把他拖进WC爆zou一顿.....