php原始碼安全加密之PHP混淆演算法.

weixin_33901926發表於2016-11-28

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 歡迎交流,有磚的輕拍.

相關文章