在matlab中如果你的代碼很重要,需要加密,目前我查到了兩種方法:一、產生p檔案;二、產生.exe檔案
matlab產生p檔案的方法很簡單,在command wondow裡面用
pcode yourfile.m
命令可以將M檔案轉化為對應的pcode檔案yourfile.p,據說是不會被反編譯的。
一、產生p檔案
P檔案是對應M檔案的一種預解析版本(preparsed version)。因為當你第一次執行M檔案時,Matlab需要將其解析(parse)一次(第一次執行後的已解析內容會放入記憶體作第二次執行時使用, 即第二次執行時無需再解析),這無形中增加了執行時間。所以我們就預先作解釋,那麼以後再使用該M檔案時,便會直接執行對應的已解析版本,即P檔案。但又 因為Matlab的解析速度非常快,一般不用自己作預解析。只有當一些程式要調用到非常多的M檔案時,如GUI應用程式時,才會作預解析,以增加以後的調 用速度。
如Matlab的目前的目錄(Current Directory)有test.m檔案,其中a=1,b=2,作預解析後,又有test.p檔案。因為P檔案的調用優先順序比M檔案要高,所以當你調用test時,會作優先選 擇而調用了test.p。
可以修改test.m的代碼為:
% ----------------------
% test.m
a = 3;
b = 4;
% ----------------------
再在Command Window裡調用test:
>> test
Warning: P-file C:\Program Files\MATLAB71\work\test.p is older than M-file C:\Program Files\MATLAB71\work\test.m.
C:\Program Files\MATLAB71\work\test.p may be obsolete and may need to be regenerated.
Type "help pcode" for information about generating P-files from M-files.
會出現一個Warning,警告你所調用的P檔案比同名的M檔案要舊,即表示M檔案已被修改了。儘管 如此,調用的還是舊的P檔案,即得出a = 1和 b = 2。
P檔案可以用來作保密代碼之用,如果你給別人一個M檔案,別人可以開啟來看到你所 有的代碼和演算法。如果你的代碼不想被別人看到,那可以給他P檔案。
pcode函數也可以應用在M函數檔案。
p檔案是加密檔案,只能運行,不能還原成m檔案的。
二、產生.exe檔案加密
他的缺點是不能夠脫離Matlab單獨運行,必須還在command window裡面調用,可移植性不強。如果產生.exe檔案就可以解決這個問題。
產生.exe檔案的方法稍微複雜點:
1、首先要保證你的程式是函數型的,而不是指令碼形式的。如果是指令碼形式的也不要緊,只需要在指令檔第一行添加 function []=name()即可。
2、然後,在command window裡用mcc -m -B sgl file.m命令產生.exe檔案,期間會讓你選擇編譯器(我的是VC6.0),會發現產生了一堆檔案。
3、將上步產生的那一堆檔案一起拷到待啟動並執行機器。此時仍需matlab所必需的動態串連庫。將 <matlab path >/extern/lib/win32/mglinstallar.exe拷貝到到待運行機器上。
4.在待啟動並執行機器上先運行mglinstallar.exe, 然後選擇解壓目錄,將在將在指定目錄下解壓縮出bin和toolbox兩個子目錄,其中在bin\win32目錄下就是數學庫和圖形庫脫離MATLAB運行所需的所有動態串連庫,共有n個。可以將這些.dll考入system32, 也可以直接放在應用程式目錄下(我把它拷在應用程式目錄下了)。而toolbox目錄則必須與應用程式同一目錄。
5.大功告成,雙擊.exe即可運行了。
總結:兩種方法都可以達到保護原始碼的目的,但是各有各的優缺點。產生p檔案的優點是方法簡單,組建檔案大小隻是原始碼的3倍左右,缺點是不能脫離matlab環境運行。產生.exe檔案的優點是可以脫離matlab單獨運行,缺點是產生的檔案大小是原來的幾千倍(5555555555,當然包含那些.dll檔案,體積最龐大的一部分)。就拿我的程式做個比較,源碼是8.34K,產生p檔案22.6K,產生可執行檔(含那些.dll)共30多兆。
參考資料:
1、MATLAB p-code如何開啟
2、對於MATLAB M檔案怎麼加密