一.PHP的加密總體上來說分以下2種:
1.擴(kuò)展組件類加密,代表有:zend、ionCube、SG、php_screw、bcompiler、BZ2等;
2.免擴(kuò)展加密:php某盾等為代表的一批;
二.它們的安全性如何?
組件類加密:對于擴(kuò)展加密,ZEND類為代表的是先編譯成opcode再壓縮執(zhí)行.理論上沒辦法得到源代碼.現(xiàn)在有一些ZEND破解,是通過OPCODE 逆向轉(zhuǎn)回PHP原代碼,好的逆向效果在98%以上.不可能百分百,而php_screw等為代表的加密組件,是對源代碼進(jìn)地xor加密,DES加密等等. 在運(yùn)行時(shí)要先解密,這樣的代碼是可以百分百被破解的.
免組件類加密:PHP某盾們,這一些都是在原有PHP代碼上面增加一個(gè)外殼,類似于NET程序的加殼方法.執(zhí)行時(shí)先通過殼來完成對原始代碼的base64 eval 解壓縮等操作.最終通過Eval執(zhí)行. 此類代碼可被劫持eval百分百還原.
三.什么樣的加密才安全?
增加解密的難度.簡要流程如下:
加密過程:PHP源代碼->PHP代碼混淆器->加密(免組件外殼或組件加密)->加密成品源碼.
執(zhí)行過程:加載程序(免組件外殼或組件加密)->PHP混淆代碼->執(zhí)行代碼.
通過上面流程,我們可以看到因?yàn)镻HP代碼進(jìn)行了混淆處理,所以被得到的代碼是亂的.這樣的代碼還是可以執(zhí)行,但會(huì)給閱讀者造成不易讀的情況.另外,加載的程序即外殼的安全性至關(guān)重要.好的外殼,才是保護(hù)程序的關(guān)鍵.
對一源代碼的混淆,可以操作的混淆內(nèi)容有:PHP變量、PHP用戶函數(shù)、PHP系統(tǒng)函數(shù)、PHP類名、PHP字符串,均可以完成加密.有人說過,這樣混淆 效果也不好啊,如何更變態(tài)?PHP支持變量名是ASCII碼的127-255,而這一些字符在編輯器中看全是漢字亂碼. 這樣就可以增加難度性.
四.加密要付出,執(zhí)行要代價(jià)!
如果只是簡單的加密函數(shù)名、變量名還好,如果對字符串進(jìn)行了加密保護(hù).在進(jìn)行每一次字符串操作時(shí)均需要執(zhí)行一次解密操作.會(huì)消耗時(shí)間,影響系統(tǒng)執(zhí)行的性能.到使用哪一種加密您值得考慮.