cocos2dx之CCUserDefault及其資料進行加密解密

_Proxy發表於2020-04-07
CCUserDefault是Cocos2d-x引擎提供的持久化方案,其作用是儲存所有遊戲通用的使用者配置資訊,例如音樂和音效配置等。為了方便起見,有時我們也可以用CCUserDefault來儲存金幣數目這種簡單的資料項。

 CCUserDefault可以看做一個永久儲存的字典,本質是一個XML檔案,將每個鍵及其對應的值以節點的形式儲存到外存中。值只支援int和float等基本型別.

    CCUserDefault::sharedUserDefault()->setBoolForKey("exit", true);
    CCUserDefault::sharedUserDefault()->flush();//這行一定要加上,不然下次啟動遊戲的時候,該資料就沒有儲存。
    bool bexit = CCUserDefault::sharedUserDefault()->getBoolForKey("exit");

這裡要注意,    CCUserDefault中有個  flush()的函式,這個用來將資料寫入xml檔案中,也就是說當你使用setXX的一些函式後記得提交(呼叫一下flush函式)

XML的一個很嚴重的問題是明文儲存,儲存在外部的資料一旦被截獲,就將直接暴露在攻擊者面前,小則篡改使用者資料,大則洩露使用者隱私資訊。因此,對儲存在檔案中的資訊加密不可忽視。
 幸運的是,前面我們已經設計好了序列化和反序列化過程,只要在其中加入合適的加密和解密演算法,即可保證我們的資料不會被輕易竊取。這裡我們只使用一個簡單的編碼輪換來加密,相關程式碼如下:


    void encode(string &str)
    {
        for(int i = 0; i < str.length(); i++) {
            int ch = str[i];
            ch = 0xff & (((ch & (1 << 7)) >> 7) & (ch << 1));
            str[i] = ch;
        }
    }
    void decode(string &str)
    {

        for(int i = 0; i < str.length(); i++) {
            int ch = str[i];
            ch = 0xff & (((ch & (1)) << 7) & (ch >> 1));
            str[i] = ch;
        }

    }


相關文章