cocos2d x學(xué)習(xí)筆記:使用摘要算法進(jìn)記錄存儲(chǔ)_第1頁(yè)
cocos2d x學(xué)習(xí)筆記:使用摘要算法進(jìn)記錄存儲(chǔ)_第2頁(yè)
cocos2d x學(xué)習(xí)筆記:使用摘要算法進(jìn)記錄存儲(chǔ)_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

cocos2d-x學(xué)習(xí)筆記:使用摘要算法進(jìn)記錄存儲(chǔ)本文將探討如何使用摘要算法進(jìn)行存檔校驗(yàn)的方法。

準(zhǔn)備工作摘要算法很多,算法內(nèi)容都是公開的。所以網(wǎng)絡(luò)上有很多現(xiàn)成的算法庫(kù),最有名的是Crypto++,該庫(kù)支持大量對(duì)稱加密,非對(duì)稱加密,和摘要算法。不過(guò)這庫(kù)太龐大了,我們只是用一個(gè)簡(jiǎn)單的摘要算法,就先不用這玩意了。我選擇了SHA1,打開后發(fā)現(xiàn)非常簡(jiǎn)潔,只有兩個(gè)源代碼(sha1.cpp,sha1.h),還有一個(gè)是測(cè)試代碼(testsha1.cpp)。我們先新建一個(gè)工程名為TestSha,然后把源代碼導(dǎo)入。然后為了方便調(diào)試,我們需要printf,cocos2d-x中打開printf的方法如下:在代理函數(shù)boolAppDelegate::applicationDidFinishLaunching()里開頭添加以下代碼:_tsetlocale(LC_ALL,_T(""));::AllocConsole();::freopen("conout$","w",stdout);別忘了加頭文件#include<tchar.h>然后你就可以使用printf啦,哇咔咔。

如何用SHA1做存檔校驗(yàn)我們使用如下代碼寫入存儲(chǔ)記錄#defineTEXT1"teststring"#defineKEY"goldlion"SHA1*sha1;unsignedchar*digest;CCUserDefault*save=CCUserDefault::sharedUserDefault();save->setStringForKey("string_value",TEXT1);sha1=newSHA1;sha1->addBytes(TEXT1,strlen(TEXT1));//輸入數(shù)據(jù)sha1->addBytes(KEY,strlen(KEY));//輸入數(shù)據(jù)digest=sha1->getDigest();//獲取校驗(yàn)碼SHA1::hexPrinter(digest,20);//打印16進(jìn)制校驗(yàn)碼到控制臺(tái)printf("\n");deletesha1;free(digest);現(xiàn)在我們寫一個(gè)讀取校驗(yàn)#defineTEXT1"teststring"#defineKEY"goldlion"SHA1*sha1;unsignedchar*digest;CCUserDefault*save=CCUserDefault::sharedUserDefault();std::stringstr=save->getStringForKey("string_value");sha1=newSHA1;sha1->addBytes(str.c_str(),str.length());//輸入數(shù)據(jù)sha1->addBytes(KEY,strlen(KEY));//輸入數(shù)據(jù)digest=sha1->getDigest();//獲取校驗(yàn)碼SHA1::hexPrinter(digest,20);//打印16進(jìn)制校驗(yàn)碼到控制臺(tái)printf("\n");deletesha1;free(digest);可以看到,校驗(yàn)是沒(méi)有問(wèn)題的破解測(cè)試現(xiàn)在我們手動(dòng)修改存檔文件UserDefault.xml,將string_value的值修改為teststringcrack。校驗(yàn)不通過(guò),玩家修改了存檔。思路1.摘要算法即從原文中提取校驗(yàn)碼,在讀取存檔時(shí),進(jìn)行校驗(yàn)。如果原文修改,校驗(yàn)碼變化,則校驗(yàn)不通過(guò)。2.因?yàn)檎惴ǘ际枪_的,在使用時(shí),我們會(huì)在輸入待校驗(yàn)數(shù)據(jù)時(shí),多輸入一個(gè)key,這個(gè)key是隱藏在編碼中的,除非玩家有很高超逆向工程技術(shù),能反編并找到key,但我們一樣可以調(diào)整Key的算法,以及提前對(duì)數(shù)據(jù)樣本進(jìn)行混淆。這種加密強(qiáng)度足以應(yīng)付一般單機(jī)游戲的開發(fā)了。網(wǎng)游存檔是在服務(wù)器端的,而且需要傳輸校驗(yàn),所以我們也不考慮本地存檔加密了。實(shí)際中的使用以上只是演示代碼,在實(shí)際使用時(shí),我們還需注意:1.為了方便,演示中我只使用了字符串,對(duì)于bool,int等類型,你可以自己封裝函數(shù),進(jìn)行校驗(yàn),這樣比較方便。2.在編寫的校驗(yàn)代碼中,增加一個(gè)開關(guān)——隨時(shí)打開和關(guān)閉校驗(yàn)。這樣做的好處是,在校驗(yàn)關(guān)閉狀態(tài),

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論