这是本文档旧的修订版!
Z5加密是由Z-Blog应用中心推出的PHP加密方案,也是Z-Blog应用中心唯一支持的加密方案。为确保用户权益,只有Z5加密后的加密文件被允许上架到应用中心。
目前处于内测状态,Z-Blog应用中心开发者可暂时免费使用。
1. 使用虚拟机执行字节码。
2. 最大限度保留PHP的有关动态功能。
3. 最低支持至PHP 5.2。
4. 无需扩展。
5. 如果你的PHP文件是一个Z-BlogPHP应用的组成部分,且这个应用上架到了Z-Blog应用中心,那么,用户的每次下载,都会自动触发加密,让每一个用户下载到的文件都完全不同。
传统的加密,有几种形式:
1. 混淆型“加密”:只是将变量名修改了一下,更换一个可以修改变量名的文本编辑器即可编辑,对于反破解几乎没有帮助。
2. 预先加密:直接把源代码进行加密,运行时解密源码后进行eval以实现“加密”效果。通过Hook eval,或者Hook Zend的编译入口 ``zend_compile_string`` 即可得到源码,甚至没有混淆型来得有用。
3. 扩展加密:通过各种编译手段将PHP代码编译为不可识别的代码,但需要服务器加装特定扩展。
Z5加密综合了123三种加密形式。其将PHP源码编译成难以还原成源码的字节码,之后通过PHP实现的虚拟机来对字节码进行运行,从根本上杜绝了被通用解密手段所破解,并且不需要服务器安装特定的扩展。
1. 因每个函数均带一个虚拟机实现,因此生成的文件相对大。
2. 加密函数的运行速度相对较慢。
加密主要用于防破解授权,考虑到加密函数执行较慢,因此,你可以在以下场合应用加密:
1. 需要运行某些速度慢的功能时,如批量发邮件等,可在这之前调用加密过的函数,来检查用户授权。
2. 在用户安装你的应用的时候(对应Z-BlogPHP的InstallPlugin函数)。
1. 由于加密后的文件不可被编辑,因此,你需要把你要加密的函数,单独抽出一个新文件。
2. 在你要加密的函数头部,加入
/**
* @Z5Encrypt
*/
即可启用加密。如以下示例。
<?php /** * @Z5Encrypt */ function a() { $j = 1; while ($j <= 9) { $i = 1; while ($i <= $j) { echo "{$i}x{$j}=" . ($i * $j) . " "; $i++; } echo "\n"; $j++; } } function b () { try { echo 'No don\'t encrypt me'; } catch (Exception $e) { echo 'look you dont support it'; } } class C { public $a = 123456; /** * @Z5Encrypt * 注:PHP 5.2下,无法运行静态成员函数 */ public static function d () { echo 123456; echo 1 . "\n"; echo 23333 . "\n"; } /** * @Z5Encrypt */ public function e ($z) { var_dump($this->a); var_dump(func_get_Args()); return $z; } } a(); b(); C::d(); $a = new C(); var_dump($a->e(123456));