php为了保证源码安全,可以采用对源代码进行加密的方式来进行保护,分两部分去进行使用:第一部分:安装:
1、进入http://sourceforge.net/projects/php-screw/下载最新版本php_screw-1.5.tar.gz
2,解压安装:tar zxvf php_screw-1.5.tar.gz
cd php_screw-1.5
vi php_screw.h
#每个加密的文件头部都一个很明显的字符串PM9SCREW, 这样很容易被人猜到是用screw加密的.
#这个问题的解决需要在安装的第一步就开始. 该标识串在源码的php_screw.h中. 在编译之前, 可以更改这个字符串
#将define PM9SCREW “\tPM9SCREW\t”
#define PM9SCREW_LEN 10
#修改为任意字串,如:
#define PM9SCREW “\tDRXCFV\t”
#define PM9SCREW_LEN 8
#如果不改这个文件,加密的文件内容开头就会有 PM9SCREW,这么做是为了隐藏加密算法。
#修改加密密钥:
vim my_screw.c
#将 short pm9screw_mycryptkey[] = {11152, 368, 192, 1281, 62};
#修改为如:
short pm9screw_mycryptkey[] = {16543, 988, 345, 1678, 62, 295};
#越长加密越可靠,建议不要大于5位数。
#执行phpize
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
如果编译出错,出现下面类似的:/tmp/php_screw-1.5/php_screw.c: In function ‘zm_startup_php_screw’:
/tmp/php_screw-1.5/php_screw.c:124: error: ‘struct _zend_compiler_globals’ has no member named ‘extended_info’
/tmp/php_screw-1.5/php_screw.c: In function ‘zm_shutdown_php_screw’:
/tmp/php_screw-1.5/php_screw.c:133: error: ‘struct _zend_compiler_globals’ has no member named ‘extended_info’
make: *** [php_screw.lo] Error 1
需要修改源文件中文件php_screw.c ,
将 124行,133行 的
CG(extended_info) = 1;修改为 CG(compiler_options) |= ZEND_COMPILE_EXTENDED_INFO;
重新make //在modules生成libscrew.so库
将生成的php_screw.so放在/www/wdlinux/php/lib/php/extensions/no-debug-non-zts-20121212目录下(其他目录也行)
3,接下来要得到加密用的screw
(1). 进入源码的tools目录
(2). make //生成screw文件
4、修改/etc/php.ini在最后加入[php_screw]
extension_dir =/www/wdlinux/php/lib/php/extensions/no-debug-non-zts-20121212
extension=php_screw.so
#注意:extension_dir=/www/wdlinux/php/lib/php/extensions/no-debug-non-zts-20121212
#没有的要先加上,不然会找不到模块 (路径和文件放置的要一样)
5,拷贝tools/screw到/usr/bin/screw第二部分:使用:
1、加密单个php文件:screw test.php
加密成功后,test.php为加密后文件,新生成的test.php.screw为加密前文件。
2、对目录下所有文件进行加密:find ./ -name "*.php" -print|xargs -n1 screw //加密所有的.php文件
#例如
find ./test -name "*.php" -print|xargs -n1 screw
Success Crypting(./test/phpinfo.php)
Success Crypting(./test/echo99.php)
Success Crypting(./test/hello.php)
find ./ -name "*.screw" -print|xargs -n1 rm //删除所有的.php源文件的备份文件