cocos2dx 圖片資源加密
圖片加密使用xxtea來加密,加密祕鑰自己定,思路就是自己使用程式碼首先將圖片加密,在程式中使用的時候,在載入圖片資源處再將資源解密
加密程式碼如下:
首先要載入標頭檔案
2、將圖片加密
3.加密部分bool jiamiImg(string inputFileName,string outFileName) { string fileName=FileUtils::getInstance()->fullPathForFilename(inputFileName); if(fileName.empty()) { return false; } Data fileData=FileUtils::getInstance()->getDataFromFile(fileName); xxtea_long ret_len; unsigned char key[100]="lyctianya"; unsigned char* ret_data= xxtea_encrypt(fileData.getBytes(), (xxtea_long)fileData.getSize(),key, (xxtea_long)strlen("lyctianya"), &ret_len); if (ret_data==NULL) { return false; } FILE*fp=fopen(outFileName.c_str(), "wb+"); if (fp==NULL) { return false; } fwrite(ret_data, ret_len, 1, fp); fflush(fp); fclose(fp); CC_SAFE_DELETE(ret_data); return true; }
4、加密後生成的檔案/*************jiami************/ /* std::string outFileName="/Users/liyongchuang/Desktop/cocosTool/code/myLuaTest/res/jiamiStar.png"; bool jiamiRet=jiamiImg("Star.png",outFileName.c_str()); if (jiamiRet) { printf("-----success-----\n"); } else { printf("------false------\n"); } */
5、修改載入圖片資源處,並使用解密
修改
加入並修改如下程式碼:標頭檔案自己加
bool isEndWith(std::string inputStr,std::string endStr) { if (inputStr.empty()||endStr.empty()) { return false; } std::string newEndStr = inputStr.substr(inputStr.find_last_of(".")); if (endStr.compare(newEndStr) == 0) { return true; } else { return false; } } bool Image::initWithImageFile(const std::string& path) { bool ret = false; _filePath = FileUtils::getInstance()->fullPathForFilename(path); #ifdef EMSCRIPTEN // Emscripten includes a re-implementation of SDL that uses HTML5 canvas // operations underneath. Consequently, loading images via IMG_Load (an SDL // API) will be a lot faster than running libpng et al as compiled with // Emscripten. SDL_Surface *iSurf = IMG_Load(fullPath.c_str()); int size = 4 * (iSurf->w * iSurf->h); ret = initWithRawData((const unsigned char*)iSurf->pixels, size, iSurf->w, iSurf->h, 8, true); unsigned int *tmp = (unsigned int *)_data; int nrPixels = iSurf->w * iSurf->h; for(int i = 0; i < nrPixels; i++) { unsigned char *p = _data + i * 4; tmp[i] = CC_RGB_PREMULTIPLY_ALPHA( p[0], p[1], p[2], p[3] ); } SDL_FreeSurface(iSurf); #else Data data; if (isEndWith(_filePath, ".lyc")) { Data fileData=FileUtils::getInstance()->getDataFromFile(_filePath); xxtea_long ret_len; unsigned char key[100]="lyctianya"; unsigned char*ret_data=xxtea_decrypt(fileData.getBytes(), (xxtea_long)fileData.getSize(), key, strlen("lyctianya"), &ret_len); data.fastSet(ret_data, ret_len); } else { data = FileUtils::getInstance()->getDataFromFile(_filePath); } if (!data.isNull()) { ret = initWithImageData(data.getBytes(), data.getSize()); } #endif // EMSCRIPTEN return ret; } bool Image::initWithImageFileThreadSafe(const std::string& fullpath) { bool ret = false; _filePath = fullpath; Data data; if (isEndWith(_filePath, ".lyc")) { Data fileData=FileUtils::getInstance()->getDataFromFile(_filePath); xxtea_long ret_len; unsigned char key[100]="lyctianya"; unsigned char*ret_data=xxtea_decrypt(fileData.getBytes(), (xxtea_long)fileData.getSize(), key, strlen("lyctianya"), &ret_len); data.fastSet(ret_data, ret_len); } else { data = FileUtils::getInstance()->getDataFromFile(_filePath); } if (!data.isNull()) { ret = initWithImageData(data.getBytes(), data.getSize()); } return ret; }
順便附上單獨解密程式碼:
bool jiemiImg(string jiaMiFileName,string outFileName)
{
string fileName=FileUtils::getInstance()->fullPathForFilename(jiaMiFileName);
if (fileName.empty()) {
return false;
}
Data fileData=FileUtils::getInstance()->getDataFromFile(fileName);
xxtea_long ret_len;
unsigned char key[100]="lyctianya";
unsigned char*ret_data=xxtea_decrypt(fileData.getBytes(),(xxtea_long)fileData.getSize(), key, strlen("lyctianya"), &ret_len);
if (ret_data==NULL) {
return false;
}
FILE*fp=fopen(outFileName.c_str(),"wb+");
if (fp==NULL) {
return false;
}
fwrite(ret_data, ret_len, 1, fp);
fflush(fp);
fclose(fp);
CC_SAFE_DELETE(ret_data);
return true;
}
/*************jiemi************/
/*
std::string outFileName="/Users/liyongchuang/Desktop/cocosTool/code/myLuaTest/res/jiemiStar.png";
bool jiaemiRet=jiemiImg("jiamiStar.png",outFileName.c_str());
if (jiaemiRet) {
printf("-----success-----\n");
}
else
{
printf("------false------\n");
}
*/
修改lua中的程式碼,並使用資源
local function main()
local gameScene=cc.Scene:create()
local ly=cc.LayerColor:create(cc.c4b(0,255,255,255))
gameScene:addChild(ly)
local lb=cc.Label:createWithSystemFont("Hello world","Arial",20)
ly:addChild(lb)
lb:setPosition(480,320)
local sp=cc.Sprite:create("res/jiamiStar.lyc")
ly:addChild(sp, 10)
sp:setPosition(cc.p(480,280))
if cc.Director:getInstance():getRunningScene() then
cc.Director:getInstance():replaceScene(gameScene)
else
cc.Director:getInstance():runWithScene(gameScene)
end
end
下面看結果:
順便提一下,大家有沒有發現一個問題,我的一些資源用了沒有釋放哦!
unsignedchar *zipFileData =FileUtils::getInstance()->getFileData(zipFilePath.c_str(), "rb", &size);
free(zipFileData);
相關推薦
cocos2dx 圖片資源加密
圖片加密使用xxtea來加密,加密祕鑰自己定,思路就是自己使用程式碼首先將圖片加密,在程式中使用的時候,在載入圖片資源處再將資源解密 加密程式碼如下: 首先要載入標頭檔案 2、將圖片加密 bool jiamiImg(string inputFileName,string
cocos2dx 3.0 使用TexturePacker對圖片資源加密
遊戲開發過程中要涉及到大量的圖片,使用TexturePacker可以把小圖合成大圖。這是我們使用最多的功能,但是TexturePacker還帶有對圖片加密的功能。之前還是對加密不慎瞭解,今天在網上搜了下然後自己親手寫了,所以寫下來分享下。 把圖片匯入到Text
(轉)quick-cocos2d-x圖片資源加密(續)
player AD sign 信息 text 語句 osc osi pan 摘要: 對在quick-cocos2d-x上實現的資源加密方法的補充 前篇: quick-cocos2d-x圖片資源加密 讓quick-cocos2d-x支持加密的plist文件 通過前篇的
(轉)quick-cocos2d-x圖片資源加密
做了 zip ali tran -o AD nor lena s2d 摘要: 在quick-cocos2d-x上實現的一種圖片資源加密的方法,現已經加入官方最新版本之中 ###quick-x已經支持用XXTEA加密方式對腳本文件進行加密。在此基礎上,自己做了一些工作,對
圖片資源加密,Lua檔案加密
轉自:http://www.cnblogs.com/zisou/p/cocos2dxJQ-67.html 遊戲開發中常遇到資源保護的問題。 目前遊戲開發中常加密的檔案型別有:圖片,Lua檔案,音訊等檔案,而其實加密也是一把雙刃劍。 需要安全那就得耗費一定的資源去實
【加密】Cocos2d-x PNG圖片資源加密
實現原理 如果你對實現原理並不感興趣,只是想直接使用的話可以跳過這節。首先我假設讀者已經清楚PNG影象檔案結構了,如果沒有的話這裡建議可以看看《揭祕資料解密的關鍵技術》第5章,這章裡面專門對PNG影象格式進行了介紹。或者看看《PNG檔案格式詳解》這篇
quick-cocos2d-x 圖片資源加密
quick-x已經支援用XXTEA加密方式對指令碼檔案進行加密。在此基礎上,自己做了一些工作,對圖片資源進行了XXTEA加密,現分享給大家。 (2014.5.30加註:quick-x的2.2.3版本已經集成了我遞交的pr,現在官方版本程式碼與文章中類似) 首先我們要有
Cocos2dx遊戲資源加密之XXTEA
在手機遊戲當中,遊戲的資源加密保護是一件很重要的事情。 我花了兩天的時間整理了自己在遊戲當中的資源加密問題,實現了跨平臺的資源流加密,這個都是巨人的肩膀之上的。 大概的思路是這樣的,遊戲資源通過XXTEA加密方法對流的加密方式,有自己的金鑰和標識,通過標識可知是否有加密
Cocos2d-lua 3.10 圖片資源加密
在遊戲釋出之前,最好將圖片加密,為apk/ipa加一層保護(雖然可能沒用),涉及兩個問題: 1. 如何對圖片加密 2. 如何讀取加密後的圖片 下面詳細說明。 對圖片加密 Quick-3.3提供了pack_files.sh可以實現對圖片加密,基本原理
針對cocos2d圖片資源自定義加密的解密
http://zhaoxiaodan.com/cocos2dx/%E9%92%88%E5%AF%B9cocos2d%E5%9B%BE%E7%89%87%E8%B5%84%E6%BA%90%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8A%A0%E5%AF%8
cocos2dx-Lua引擎遊戲指令碼及圖片資源解密與DUMP
分析目標 少年三國志,包名:com.youzu.android.snsgz 全民水滸,包名:com.tencent.Q108 下面分析的主要是少年三國志。 Lua指令碼解密與DUMP LuaJit IDA分析呼叫樹: AppDelegate:
AES加密解密圖片資源
AES.java import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public class AES
iOS_加密保護1_圖片資源
由於版權、防盜用、防山寨的需要 ipa的bundle中的圖片需要進行加密, 使用者安裝app時,bundle中的圖片是進行加密後的圖片 具體加密思路如下: 1、將要加密的圖片全部放到桌面上的一個資料夾內 2、新建一個Mac 命令列專案,對該資料夾內的所有圖片進行加密,具
TexturePacker 圖片打包工具講解與使用並且批處理打多包以及資源加密
TexturePacker這個詞從字面來說就是Texture(紋理) + Packer(打包)。它是一款把若干資源圖片拼接為一張大圖的工具。 手機遊戲開發中,為了提高圖片渲染效能,經常需要將小圖片合併成一張大圖進行渲染。如果手工來做的話就非常耗時。TexturePa
ios開發 圖片資源的簡單加密(一)
實現最簡單的圖片加密和解密 注意:使用加密圖片,勢必會影響app的效能 整體思路: 生成加密檔案:在mac端 1.將image.png的檔案轉成NSData 2.把NSData檔案與密碼檔案sn(NSData)拼接 3.把拼接好的NSData檔案儲存為以image.d
用異或法簡單加密Android的圖片資源
思路:本地用異或加密好圖片---放入Android的assets資料夾下---在程式裡用異或解密。 都知道解壓APK檔案能拿到程式的圖片資源,為了保護圖片資源不被盜用,可採用簡單異或的方法對圖片進行加密,這樣即使解壓APK檔案,圖片也無法開啟。 第一步,通過建立一個JA
cocos2dx使用xxtea加密資源
記錄在cocos2dx下使用xxtea加密,以下都為ios版本操作 1.資源加密 quick有一個加密資源和指令碼的解決方案,即使用xxtea加密並且可以進行打包,在pack_files資料夾下有一個pack_files.sh本人使用的mac,中windows中使用.
cocos2dx中載入圖片資源的方法,和從記憶體中獲取已經載入的圖片資源的方法 以及釋放問題
遊戲中通常需要將常用的資源如:聲音,圖片,plist檔案,提前載入進記憶體,以加快遊戲的流暢度 1.預載入聲音: SimpleAudioEngine::getInstance()->preloadBackgroundMusic("boom.mp3"); 載入之後就可以
如何通過 WebP 自適應方案減少圖片資源大小
ont 圖片文件 display zip 副本 org 占比 會有 xhtml 前言 我們知道,理想的網頁應該在 1 秒內打開,而在頁面的整體大小中,圖片往往是所占比例最大的一部分(大約占到 60% 以上,更多了解請點擊),也可以參照如下圖所示。優化圖片不僅可以加快頁面顯示
關於矢量圖片資源向後兼容:CompatVectorFromResourcesEnabled標誌的使用
圖片資源 quest source things enable release have ive stack StackOverflow上摘抄的: some things have changed since I asked this question so I will