php源碼安全加密之PHP混淆算法.


php源碼安全加密的前世今生,本想發在教程區中.不知道怎么發,就寫在這里面吧.
PHP加密,解密是一直的話題,本人菜鳥,今天就簡單向大家介紹一下並說說其中原理.提供一些加密的混淆算法.
一\PHP的加密總體上來說分以下2種:
1\擴展組件類加密,代表有:zend\ionCube\SG\php_screw\bcompiler\BZ2等.
2\免擴展加密:php某盾等為代表的一批.

二\他們的安全性?
組件類加密:對於擴展加密,ZEND類為代表的是先編譯成opcode再壓縮執行.理論上沒辦法得到源代碼.現在有一些ZEND破解,是通過OPCODE逆向轉回PHP原代碼,好的逆向效果在98%以上.不可能百分百,而php_screw等為代表的加密組件,是對源代碼進地xor加密,DES加密等等. 在運行時要先解密,這樣的代碼是可以百分百被破解的.
免組件類加密:PHP某盾們,這一些都是在原有PHP代碼上面增加一個外殼,類似於NET程序的加殼方法.執行時先通過殼來完成對原始代碼的base64 eval 解壓縮等操作.最終通過Eval執行. 最致命此類代碼可被劫持eval百分百還原.

三\什么樣的加密才安全?
不加密才最安全.呵...這個沒說一樣.不過有一個想法,可以增加解密的難度.簡要流程如下:
加密過程:PHP源代碼->PHP代碼混淆器->加密(免組件外殼或組件加密)->加密成品源碼.
執行過程:加載程序(免組件外殼或組件加密)->PHP混淆代碼->執行代碼.

通過上面流程,我們可以看到因為PHP代碼進行了混淆處理,所以被得到的代碼是亂的.這樣的代碼還是可以執行,但會給閱讀者造成不易讀的情況.另外,加載的程序即外殼的安全性至關重要.好的外殼,才是保護程序的關鍵.
對一源代碼的混淆,可以操作的混淆內容有:PHP變量\PHP用戶函數\PHP系統函數\PHP類名\PHP字符串,均可以完成加密.有人說過,這樣混淆效果也不好啊,如何更變態?PHP支持變量名是ASCII碼的127-255,而這一些字符在編輯器中看全是漢字亂碼. 這樣就可以增加難度性.

四\加密要付出,執行要代價!
如果只是簡單的加密函數名\變量名還好,如果對字符串進行了加密保護.在進行每一次字符串操作時均需要執行一次解密操作.會消耗時間,影響系統執行的性能.到使用哪一種加密您值得考慮.

本人網址:http://www.phpjiami.com 歡迎交流,有磚的輕拍.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM