如何快速加密MATLAB代碼 | pcode
圖圖今天教大家如何利用P代碼對MATLAB的源代碼(.m文件)進(jìn)行加密。
MATLAB代碼加密
我們?yōu)槭裁匆獙Υa進(jìn)行加密? 大多數(shù)的MATLAB用戶都在進(jìn)行復(fù)雜算法的設(shè)計(jì),或者非常個(gè)性化的GUI軟件開發(fā),這一過程通常非常費(fèi)時(shí)費(fèi)力,甚至需要嚴(yán)格保密。如果我們想讓其他人用上自己開發(fā)的代碼(所實(shí)現(xiàn)的功能),又不想讓對方知道源代碼,就需要對代碼進(jìn)行加密。


MATLAB出了2種加密.m文件的解決方案:
A 生成獨(dú)立應(yīng)用程序
使用MATLAB Compiler將源代碼文件生成獨(dú)立應(yīng)用程序(.exe),將.exe分發(fā)給其它人。

B 生成P代碼
將某些或全部源代碼文件轉(zhuǎn)換為一種名為P代碼的文件(文件擴(kuò)展名為 .p)。P代碼內(nèi)的內(nèi)容是無法查看的。
A方案的優(yōu)點(diǎn)是安全性高,但是打包的獨(dú)立應(yīng)用程序安裝包非常大,需要安裝匹配MATLAB版本的runtime環(huán)境才能運(yùn)行(runtime需要另外安裝,通常有1G左右大?。?,且并非所有的內(nèi)容都能很好的打包,比如圖圖的FigureBest軟件天生不能打包成.exe文件運(yùn)行。這樣打包的應(yīng)用非MATLAB用戶基本無法使用。
B方案的優(yōu)點(diǎn)是非常靈活,可以加密部分代碼或者全部代碼(下方展示了部分加密的代碼),無論是加密還是最終運(yùn)行速度都極快。但是缺點(diǎn)也很明顯,就是安全性比較低,破解是可能的。

P代碼
本期推送里僅教大家使用P代碼進(jìn)行加密,關(guān)于MATLAB Compiler的使用后面有機(jī)會(huì)再補(bǔ)充。
p意思是預(yù)解析(preparsed version)。即將.m文件里的代碼預(yù)解析一遍,生成p文件。當(dāng)再次調(diào)用時(shí),實(shí)際上調(diào)用的就是.p文件。當(dāng)MATLAB將某文件轉(zhuǎn)換為p代碼文件時(shí),該文件將進(jìn)行模糊處理而非加密。雖然.p文件中的內(nèi)容難以理解,但不應(yīng)將其視為安全的。(真正的大大大大佬是可以破解的,不過可能會(huì)被M公司狠狠地處理;對于我們這些小白就和加密是一樣的。)

p代碼轉(zhuǎn)換相比打包成獨(dú)立應(yīng)用要簡單和方便很多,如果你只是想小范圍的分享你的代碼又不想別人知道你的實(shí)現(xiàn)細(xì)節(jié),就可以考慮用p代碼的形式實(shí)現(xiàn)。

p代碼如何生成
m代碼到p代碼的轉(zhuǎn)換是通過調(diào)用pcode函數(shù)實(shí)現(xiàn)。
pcode(fun)
對 fun.m 中的代碼進(jìn)行模糊處理并生成名為 fun.p 的文件,即所謂的p文件。如果fun是一個(gè)文件夾,則該文件夾中的所有腳本或函數(shù)文件都在p文件中進(jìn)行模糊處理。MATLAB 在當(dāng)前文件夾中創(chuàng)建p文件。原始的 .m 文件或文件夾可以位于搜索路徑上的任何位置。
pcode(fun1,...,funN)
從列出的文件創(chuàng)建p文件。如果輸入了任意個(gè)文件夾,則 MATLAB 為各文件夾所包含的每個(gè) .m 文件創(chuàng)建一個(gè)p文件。
pcode(fun,'-inplace')
在腳本或函數(shù)文件所在的同一個(gè)文件夾中創(chuàng)建p文件。

p代碼如何調(diào)用
調(diào)用方式和.m文件一模一樣,只不過不能直接雙擊打開.p文件。創(chuàng)建好.p文件后將同名的.m文件移出+備份以避免沖突!
注意:在執(zhí)行中 P 文件優(yōu)先于對應(yīng)的 MATLAB 代碼文件。
- 公眾號(hào)后臺(tái)回復(fù)`全家桶`獲取所有作品;
- 圖圖的MATLAB交流群:1129425848;