Php 代码加密可以算是刚需了,但是官方本身并不支持。所以市面上就有很多三方的加密工具,尴尬的是,解密的工具比加密的工具不会少。所以对常见的 php 代码加密工具做了简单的分析,最终选择 yakpro-po 来加密代码。
Php 代码加密工具对比
加密工具 | 说明 | 是否存在解密工具 | 是否收费,及价格 |
phpjiami | 无扩展壳加密,弱 | ||
zhaoyuanma | 无扩展壳加密,弱 | ||
php-beast | 有扩展壳加密,弱 | 有 | |
php_screw | 有扩展壳加密,弱 | 有 | |
screw_plus | 有扩展壳加密,弱 | ||
ZoeeyGuard | 有扩展壳加密,弱 | 有 | |
tonyenc | 有扩展壳加密,弱 | ||
EnPHP | 混淆加密 | ||
php-obfusactor | 混淆加密 | 无 | |
yakpro-po | 混淆加密 | 无 | |
魔方加密 | 虚拟机加密 | 有 | |
Z5 加密 | 虚拟机加密 | 否 | 100-1000 |
Zend Guard | 近似加密 | 有 | 收费,停止更新 |
ionCube | 近似加密、扩展加密 | 有 | 收费 |
Swoole Compiler | 近似加密、扩展加密 | 否 | 3000-50000 |
SG11(SourceGuardian) | 近似加密、扩展加密 | 有 |
yakpro-po 加密(混淆)php 代码经验
yakpro-po 是开源的加密工具,github 地址:https://github.com/pk-fr/yakpro-po
1 严格意义上,yakpro 只是对 php 代码中的变量、常量、函数、方法、类进行了混淆,然后用 goto 打乱代码顺序。
2 字符串没有混淆,而是用一种 16 进制字符表示,不知道怎么解密,但是放到 php 里面 echo 就能输出可读字符串。对 php 来说没有加密,对人类来说,加密了,不可读。
3 每次加密都是随机混淆。即这次 A 转换为 B,可能下次就是 A 转换为 C 了。所以要对整个目录进行一次性混淆。
4 混淆前后,变量对应关系可以在 yakpro-po/context 中找到。
5 没找到混淆项目时,排除其中几个目录的方法。配置文件中的 keep、skip 没用,所以把要加密的单独拎出来放到一个目录。
6 由于只对变量、常量、函数、方法、类进行了混淆,没有混淆字符串,所以有把字符串当【变量、常量、函数、方法、类名】的代码均会出错。如全局变量$in、$config,直接用$GLOBALS[‘in’]、$GLOBALS[‘config]访问出错;array_map(‘stripslashes_deep’, $value)这种形式调用 stripslashes_deep 函数会出错等等。所以直接配置不混淆类名和方法名
7 前端 html 和 php 混合的模板页面也支持不好,所以不混淆模板文件。且模板文件中的 php 函数也配置为忽略混淆。
8 在 include/class/config.php 中注释 comment 可以删除通过 yakpro-po 自动生成的版权信息。