[Python] python代碼加密

[Python]python代碼加密 | py文件編譯為pyc、pyo文件 | python -m 模塊生成[複製鏈接]ikko

電梯直達樓主

發表於 2013-10-26 19:51|只看該作者

分享到:0生成pyo文件python -O -m py_compile test.py生成pyc文件python -m py_compile test.pypython -m compileall .

由於python設計的初衷是開源的,因此py文件是可以直接看到源碼的。但如果開發商業軟體,則不可能將源碼泄漏出去,因此py代碼加密保護就顯得十分重要了。pyc文件是py文件經過編譯後生成的二進位文件,不是明文顯示,因此可以發布PYC文件以隱藏源代碼。與py文件相比PYC文件擁有更快的載入速度,執行速度沒有區別。pyc是一種跨平台的位元組碼,於是由python的虛擬機來執行的,這個是類似於JAVA或者.NET的虛擬機的概念。值得注意的是,pyc的內容是跟python的版本相關的,不同版本編譯後的pyc文件是不同的,2.5編譯的pyc文件,2.4版本的python是無法執行的。當然,pyc文件也是可以反編譯的,不同版本編譯後的pyc文件是不同的,根據python源碼中提供的opcode,可以根據pyc文件反編譯出py文件源碼,網上可以找到一個反編譯python2.3版本的pyc文件的工具,不過該工具從python2.4開始就要收費了,如果需要反編譯出新版本的pyc文件的話,就需要自己動手了,不過你可以自己修改python的源代碼中的opcode文件,重新編譯python,從而防止不法分子的破解。生成單個pyc文件python提供了內置的類庫來實現把py文件編譯為pyc文件,這個模塊就是py_compile模塊。使用方法如下:[root@server-1 test]# python -m py_compile test.py[root@server-1 test]# python -O -m py_compile test.py-O 優化成位元組碼(pyo)-m表示把後面的模塊當成腳本運行-OO表示優化的同時刪除文檔字元串python的編譯是通過使用py_compile的compile()方法來實現的。compile函數原型:批量生成pyc文件一般來說,我們的工程都是在一個目錄下的,一般不會說僅僅編譯一個py文件而已,而是需要把整個文件夾下的py文件都編譯為pyc文件,python又為了我們提供了另一個模塊:compileall。使用方法如下:[root@server-1 test]# python -m compileall .Listing . ...Compiling ./test.py ...Compiling ./mgmt.py ...如果看過compileall模塊的源碼我們可以知道compileall編譯.py文件其實還是調用了py_compile的compile()方法。總結通過上面的方法,可以方便的把py文件編譯為pyc文件了,從而可以實現部分的源碼隱藏,保證了python做商業化軟體時,保證了部分的安全性吧,如果想實現真正的加密:Python代碼加密,就要改PYTHON源碼,做自己的加密模塊了。python,源代碼,虛擬機,二進位,JAVA,JAVA
推薦閱讀:

Python一星期入門第6篇: 模塊和包
用半年的時間來開發一個新網站,應該選 PHP 還是 Python?
收藏學習 | 2017年開源 Python 項目 Top30
處理成首尾連接分叉列表

TAG:Python | 代碼 | 加密 |