1. 程式人生 > >cocos2dx 圖片資源加密

cocos2dx 圖片資源加密

圖片加密使用xxtea來加密,加密祕鑰自己定,思路就是自己使用程式碼首先將圖片加密,在程式中使用的時候,在載入圖片資源處再將資源解密

加密程式碼如下:

首先要載入標頭檔案

2、將圖片加密

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;
    
}
3.加密部分
    /*************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");
    }
     */
4、加密後生成的檔案


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