Cocos2d-x客戶端資源加密
安卓打包的apk檔案只是做了簡單的壓縮,通過解壓縮可以獲取資原始檔,如果不想圖片資源被別人看到,那麼可以對圖片進行加密。
cocos2d-x提供了xxtea加密和解密演算法,先將圖片進行加密,這樣就打不開圖片了,然後在CCImage解析圖片的時候進行解密即可。
一、下載quick-cocos2d-x
quick-cocos2d-x封裝了一套加密的工具,先下載quick-cocos2d-x,git地址https://github.com/dualface/v3quick。
解壓之後把bin目錄拷貝到我們的cocos2d-x工程根目錄。
二、加密
quick-cocos2d-x提供了pack_files命令,可以將圖片進行加密,加密演算法用的是xxtea,你可以到cocos2d-x\external\xxtea目錄下檢視。
到bin目錄開啟命令列視窗,執行pack_files.bat -h 可以檢視pack_files的使用方法。
編寫打包資源指令碼
- ::res_pack.bat
- set DSRC=E:\Cocos2d\Cocos2d-x\Projects\Game_Lua\res
- set ESRC=E:\Cocos2d\Cocos2d-x\Projects\Game_Lua\assets
- cd bin
- pack_files.bat -i %DSRC% -o %ESRC% -ek 123456 -es test
加密後的圖片檔案:
開啟遊戲則會報錯,unsupport image format,因為每種圖片的前面一些位元組是這種圖片型別的標記,比如png的前面8個位元組固定是0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a。因為已經被加密了,所以識別不了圖片格式。
二、解密
所有圖片的載入都封裝在CCImage類的initWithImageFile和initWithImageFileThreadSafe方法。
- // initWithImageFile
- Data data = FileUtils::getInstance()->getDataFromFile(_filePath);
- if (!data.isNull())
- {
- ret = initWithImageData(data.getBytes(), data.getSize());
- }
封裝一個解密方法,引數是Data型別的,然後再用解密後的資料去載入圖片。
- void Image::image_decrypt(Data *data)
- {
- const char* key = "123456";
- const char* sign = "test";
- unsigned char* dataBytes = data->getBytes();
- ssize_t dataLen = data->getSize();
- ssize_t signLen = strlen(sign);
- ssize_t keyLen = strlen(key);
- if (strncmp(sign, (const char*)dataBytes, signLen) != 0)
- {
- return;
- }
- xxtea_long retLen = 0;
- unsigned char* retData = xxtea_decrypt(dataBytes+signLen, dataLen-signLen, (unsigned char*)key, keyLen, &retLen);
- data->fastSet(retData, retLen);
- }
相關文章
- 如何開啟客戶端加密特性客戶端加密
- zookeeper 開源客戶端ZkClient使用客戶端client
- zookeeper 開源客戶端Curator使用客戶端
- 配置郵件客戶端(無SSL/TLS加密)客戶端TLS加密
- 實現客戶端加密,後臺解密薦客戶端加密解密
- OAuth客戶端開源JDK:AppAuthOAuth客戶端JDKAPP
- security.js RSA加密與java客戶端解密JS加密Java客戶端解密
- 【加密】Cocos2d-x PNG圖片資源加密(修改版)加密
- FTP客戶端:Transmit 5 for Mac中文啟用版資源FTP客戶端MITMac
- 桌面客戶端效能提升,最佳化使用資源消耗客戶端
- 企業客戶管理系統:智慧管理客戶資料 擴充客戶資源
- SHA-256加密簡單例項(客戶端、服務端)加密單例客戶端服務端
- ntp客戶端配置多個時間源客戶端
- Cocos2d-x 資源加密解密實踐總結加密解密
- dubbo客戶端客戶端
- Pulsar客戶端客戶端
- mqtt 客戶端MQQT客戶端
- 客戶端資料儲存概述客戶端
- Istio 中實現客戶端源 IP 的保持客戶端
- C#實現組播源及客戶端C#客戶端
- 程式碼開源, 抓取主流商城資料 UIbootstrap,ios客戶端UIbootiOS客戶端
- 客戶端,服務端客戶端服務端
- 服務端,客戶端服務端客戶端
- Nacos - 客戶端心跳續約及客戶端總結客戶端
- 物理DataGuard客戶端無縫切換--客戶端TAF 配置客戶端
- 客戶端連不上資料庫客戶端資料庫
- 開源Influxdb2高效能客戶端UXDB2客戶端
- YUM源伺服器搭建與客戶端配置使用伺服器客戶端
- 客戶端加解密客戶端解密
- Zookeeper 客戶端 API客戶端API
- java websocket 客戶端JavaWeb客戶端
- 客戶端筆記客戶端筆記
- Redis-客戶端Redis客戶端
- redis客戶端管理Redis客戶端
- CXF--客戶端客戶端
- 中斷客戶端客戶端
- github客戶端使用Github客戶端
- ftp客戶端,ftp客戶端軟體具體怎麼使用?FTP客戶端