php文件通常以文本格式存貯在服務(wù)器端, 很容易被別人讀到源代碼, 為了對源代碼進(jìn)行保護(hù), 可以采用對源代碼進(jìn)行加密的方式.要實(shí)現(xiàn)該功能需要兩部分:
一是加密程序,實(shí)現(xiàn)對PHP文件的加密. 另一個就是對加密過的PHP文件進(jìn)行解析, 以得到運(yùn)行結(jié)果. 前者的實(shí)現(xiàn)比較簡單, 就是一程序而已. 后者的實(shí)現(xiàn)大部分都是通過php module的形式來實(shí)現(xiàn)的.
php_screw(螺絲釘)可以實(shí)現(xiàn)以上的功能.最新版本是1.5,可以在sourceforge上下載.
安裝:
安裝的目的其實(shí)就是產(chǎn)生兩個文件:一個是用于加密PHP文件的screw, 另一個就是php加載的解析模塊php_screw.so
1.將源代碼包展開, 并進(jìn)入該入目錄:
2. 執(zhí)行phpize, 就會在該目錄下產(chǎn)生一個configure
3. 然后,運(yùn)行configure
4. 再make
這樣, 解析用的php_screw.so就生成了. 接下來要得到加密用的screw
1. 進(jìn)入源碼的tools目錄
2. make
這樣就生成了screw了. 如果要加密一個lx.php文件, 則: screw lx.php, lx.php就變成加密的了, 原來明文的lx.php被改名為lx.php.screw
接下來的任務(wù)就應(yīng)該是加載php_screw.so模塊了,
首先, 將該文件COPY到module目錄下, 具體是哪個目錄,可以參見/etc/php.ini配置文件中的extension_dir項(xiàng),RHEL 5中為/usr/lib/php/modules
方法一:可以在/etc/php.d目錄下新建一個screw.ini文件,其內(nèi)容是一句話extension=php_screw.so
方法二:通過修改php.ini文件, 增加了一句extension=php_screw.so, 重啟apache后就成功了.
測試:
編寫一個hello, world程序,文件名為hello.php如下:
用php hello.php測試程序是否能成功顯示, 成功顯示后, 用screw對其進(jìn)行加密(screw helllo.php), 然后cat一下該php文件, 發(fā)現(xiàn)已經(jīng)不是文本的了, 變成了許多亂字符, 說明加秘成功, 然后再php hello.php, 如果能正常顯示hello,world, 則說明加密的解析也沒有問題了, 一切就算OK了.否則, 就說明還有不對的地方, 需要再仔細(xì)檢查.
安裝過程中遇到的問題:
1.找不到phpize
phpize是屬于php-develp的一個工具, (具體作用請自行解決) 因此, 必須要安裝php-develp包. 中間有一些依賴, 如下:
01 |
[root@localhost Server] |
02 |
warning: php-devel-5.1.6-5.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 |
03 |
error: Failed dependencies: |
04 |
autoconf is needed by php-devel-5.1.6-5.el5.i386 |
05 |
automake is needed by php-devel-5.1.6-5.el5.i386 |
06 |
[root@localhost Server] |
07 |
autoconf213-2.13-12.1.noarch.rpm autoconf-2.59-12.noarch.rpm |
08 |
[root@localhost Server] |
09 |
warning: autoconf-2.59-12.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 |
10 |
error: Failed dependencies: |
11 |
imake is needed by autoconf-2.59-12.noarch |
12 |
[root@localhost Server] |
13 |
warning: imake-1.0.2-3.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 |
16 |
[root@localhost Server] |
17 |
warning: autoconf-2.59-12.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 |
20 |
[root@localhost Server] |
21 |
automake14-1.4p6-13.noarch.rpm automake16-1.6.3-8.noarch.rpm automake-1.9.6-2.1.noarch.rpm |
22 |
automake15-1.5-16.noarch.rpm automake17-1.7.9-7.noarch.rpm |
23 |
[root@localhost Server] |
24 |
warning: automake-1.9.6-2.1.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 |
27 |
[root@localhost Server] |
28 |
warning: php-devel-5.1.6-5.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 |
2.每個加密的文件頭部都一個很明顯的字符串PM9SCREW, 這樣很容易被人猜到是用screw加密的.
這個問題的解決需要在安裝的第一步就開始. 該標(biāo)識串在源碼的php_screw.h中. 在編譯之前, 可以更改這個字符串, 例如,更改為PeterHu, 相應(yīng)的下面的長度就不再是10了, 而是\tPeterHu\t,一共7個了.
1 |
#define PM9SCREW "\tPM9SCREW\t" |
2 |
#define PM9SCREW_LEN 10 |