当前位置: 首页 > article >正文

PHP源码加密之php-beast

1、简介

php-beast可以对PHP源码文件进行加密,加密后的文件也可以正常的访问。

2、安装php-beast

# 下载php-beast
wget https://github.com/liexusong/php-beast/archive/master.zip

# 解压下载的文件
unzip master.zip

# 进入解压后的目录
cd php-beast-master

# ‌生成配置文件
phpize

# 检测系统环境,确认是否具备编译和安装所需的依赖项。如果加上参数【--enable-execute-normal-script=off】可以禁止执行未加密的PHP脚本。
./configure

# 安装
sudo make && make install

安装完毕后,修改 php.ini 文件,添加【extension=beast.so】配置项后重启php-fpm。

3、配置与使用

3.1、配置

3.1.1、php-beast是开源项目,为防止网上的解密软件识别我们的加密文件,所以需要修改加密的key,增强加密的安全性。

  • header.c:加密文件头结构
  • aes_algo_handler.c:使用aes模块就修改此文件
  • des_algo_handler.c:使用des模块就修改此文件

3.1.2、根据需要修改 configure.ini 的配置内容。

  • src_path:要加密项目的路径。
  • dst_path:保存加密后项目的路径。
  • expire:设置项目可使用的时间 (expire 的格式是:Y-m-d H:i:s )。
  • encrypt_type:加密的方式,选择项有:DES、AES、BASE64。

3.1.3、设置指定的机器上运行,要使用此功能可以在 networkcards.c 文件添加服务器的IP地址。

注意:由于有些机器网卡名可能不一样,所以如果你的网卡名不是 eth0 的话,可以在 php.ini 中添加配置项: beast.networkcard = "xxxx" 其中 xxxx 就是你的网卡名,也可以配置多张网卡,如:beast.networkcard = "eth0,eth1,eth2"。

3.2、使用

3.2.1、可用函数

  • beast_encode_file(): 用于加密一个文件
  • beast_avail_cache(): 获取可以缓存大小
  • beast_support_filesize(): 获取beast支持的最大可加密文件大小
  • beast_file_expire(): 获取一个文件的过期时间
  • beast_clean_cache(): 清空beast的所有缓存(如果有文件更新, 可以使用此函数清空缓存)

3.2.2、编写PHP代码加密

# $file 要加密的php原文件,$targetFile 加密后的文件,$res 加密成功返回true
$res = beast_encode_file($file, $targetFile);

3.2.3、工具加密

在解压后的目录中有个tools目录,其目录下有两个文件,一个是加密单个文件,一个是加密目录下的所有PHP文件。

(1)加密一个文件:encode_file.php

使用格式:php encode_file.php --oldfile old_file_path --newfile new_file_path --encrypt DES --expire "2024-12-12 12:12:12"

  • --oldfile:加密文件的路径
  • --newfile:加密后文件的路径
  • --encrypt:加密方式
  • --expire:过期时间

(2)加密目录下的所有PHP文件:encode_files.php

第一步必须先配置【configure.ini】文件

第二步在tools目录下执行【php encode_files.php】

3.2.4、加密效果

3.2.5、注意:我所使用的是PHP7.4版本的,加密后网站是可以正常访问,实操验证过。可据其他PHPer说PHP8版本不支持,我没验证过。

4、参考资料

  • https://github.com/liexusong/php-beast

http://www.kler.cn/a/443141.html

相关文章:

  • CompletableFuture // todo
  • Jenkins pipeline 发送邮件及包含附件
  • Git:Cherry-Pick 的使用场景及使用流程
  • 【git】在服务器使用docker设置了一个gogs服务器,访问和现实都不理想
  • GO随记:不使用主键id 如何分表与mysql大表
  • 为深度学习引入张量
  • sqoop导入hdfs,hive
  • Linux查看是否有www-data用户,如果没有添加一个
  • 算法-Z-order算法
  • form表单校验对象中的对象的属性 / 根据表单中某一个数据动态添加其他项是否必填
  • 软件测试丨性能测试基本概念
  • CAD学习 day3
  • MySQL系列之数据类型(String)
  • qt-C++笔记之继承自 QWidget和继承自QObject 并通过 getWidget() 显示窗口或控件时的区别和原理
  • 绿色浪潮,VELO Angel Glide坐垫奏响环保骑行乐章
  • VUE3 笔记总结
  • abc 384 D(子数组->前缀和) +E(bfs 扩展的时候 按照数值去扩展)
  • 【中工开发者】HarmonyOS APP打怪小游戏
  • QMainwindow的鼠标跟踪事件不触发问题
  • C/C++ 匿名namespace和有名namespace的区别
  • 面试小札:闪电五连鞭_5
  • tryhackme-Pre Security-Defensive Security Intro(防御安全简介)
  • Parcel 常用插件:增强功能与性能的最佳选择
  • ASRPRO学习笔记二之语音控制LED亮灭
  • 鸿蒙操作系统简介
  • git 怎么删除一个远程分支