Cocos2dx 集成CryptoPP

廢話不多說,直接進入正題。
CryptoPP的代碼可以直接官網或者github下載。
本人使用的CryptoPP版本是cryptopp565舊版,喜歡折騰的可以下載最新版,不過最新版我沒試過,看官網說明新版用NDK編譯會有問題。

Win32平臺

首先在Classes同級目錄建立一個external目錄,將下載的CryptoPP解壓到external目錄,並且將文件夾改名爲cryptopp
然後打開Cocos2dx工程將cryptlib工程添加到項目裏
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
添加完成後就會在項目中出現cryptlib的工程,接下來就是修改相關的工程屬性,首先修改cryptlib工程的屬性配置,直接上圖:
在這裏插入圖片描述
在這裏插入圖片描述
需要修改的的地方我都框起來了(所有的截圖都是已經修改過的,不一定要與圖片一致,不同的情況可以適當調整),輸出目錄中間目錄最好與Cocos2dx工程保持一致;如果保持一致請將生成的cryptlib.lib文件拷貝到項目生成的可執行文件目錄下,不然會發生找不到cryptlib.lib的報錯。
運行庫一定要與Cocos2dx工程保持一致,不然會報錯。
OK,現在cryptlib.lib修改完了現在開始修改Cocos2dx工程
1.首先在引用目錄中添加我們自己添加的external目錄,具體寫法需根據自己的文件所在位置進行調整
在這裏插入圖片描述
在這裏插入圖片描述
2.然後在附加依賴項中添加cryptlib.lib
在這裏插入圖片描述
好的,現在我們的Win32平臺基本已經配置完成了,現在可以寫一段代碼測試一下。我們可以在HelloWorldScene.cpp中init()函數中添加代碼測試。

#include "cryptopp/md5.h"
#include "cryptopp/hex.h"
	byte digest[CryptoPP::MD5::DIGESTSIZE];
	std::string message = "HelloWorld";
	CryptoPP::MD5 hash;
	hash.CalculateDigest(digest, (const byte*)message.c_str(), message.size());
	CryptoPP::HexEncoder encoder;
	std::string output;
	encoder.Attach(new CryptoPP::StringSink(output));
	encoder.Put(digest, sizeof(digest));
	encoder.MessageEnd();
	CCLOG("HelloWorld MD5 : %s", output.c_str());

在這裏插入圖片描述
如果沒問題,就可以在輸出窗口看到類似的打印。

Android平臺

cryptopp文件夾中新建一個Android.mk文件,將cpp文件添加到文件中,一些含有main入口的文件不要添加(例如:fipstest.cpp,regtest.cpp,test.cpp,validat1.cpp,validat2.cpp,validat3.cpp,bench.cpp,bench2.cpp)不同版本可能有些不同,文件中的類容大致如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := cryptopp_static
LOCAL_ARM_MODE := arm
LOCAL_MODULE_FILENAME := libcryptopp

LOCAL_SRC_FILES := \
        3way.cpp \
        adler32.cpp \
        algebra.cpp \
        algparam.cpp \
        arc4.cpp \
        asn.cpp \
        authenc.cpp \
        base32.cpp \
        base64.cpp \
        basecode.cpp \
        bfinit.cpp \
        blake2.cpp \
        blowfish.cpp \
        blumshub.cpp \
        camellia.cpp \
        cast.cpp \
        casts.cpp \
        cbcmac.cpp \
        ccm.cpp \
        chacha.cpp \
        channels.cpp \
        cmac.cpp \
        cpu.cpp \
        crc.cpp \
        cryptlib.cpp \
        default.cpp \
        des.cpp \
        dessp.cpp \
        dh.cpp \
        dh2.cpp \
        dll.cpp \
        dsa.cpp \
        eax.cpp \
        ec2n.cpp \
        eccrypto.cpp \
        ecp.cpp \
        elgamal.cpp \
        emsa2.cpp \
        eprecomp.cpp \
        esign.cpp \
        files.cpp \
        filters.cpp \
        fips140.cpp \
        gcm.cpp \
        gf256.cpp \
        gf2n.cpp \
        gf2_32.cpp \
        gfpcrypt.cpp \
        gost.cpp \
        gzip.cpp \
        hex.cpp \
        hmac.cpp \
        hrtimer.cpp \
        ida.cpp \
        idea.cpp \
        integer.cpp \
        iterhash.cpp \
        keccak.cpp \
        luc.cpp \
        mars.cpp \
        marss.cpp \
        md2.cpp \
        md4.cpp \
        md5.cpp \
        misc.cpp \
        modes.cpp \
        mqueue.cpp \
        mqv.cpp \
        nbtheory.cpp \
        network.cpp \
        oaep.cpp \
        osrng.cpp \
        panama.cpp \
        pch.cpp \
        pkcspad.cpp \
        polynomi.cpp \
        pssr.cpp \
        pubkey.cpp \
        queue.cpp \
        rabin.cpp \
        randpool.cpp \
        rc2.cpp \
        rc5.cpp \
        rc6.cpp \
        rdrand.cpp \
        rdtables.cpp \
        rijndael.cpp \
        ripemd.cpp \
        rng.cpp \
        rsa.cpp \
        rw.cpp \
        safer.cpp \
        salsa.cpp \
        seal.cpp \
        seed.cpp \
        serpent.cpp \
        sha.cpp \
        sha3.cpp \
        shacal2.cpp \
        shark.cpp \
        sharkbox.cpp \
        simple.cpp \
        skipjack.cpp \
        socketft.cpp \
        sosemanuk.cpp \
        square.cpp \
        squaretb.cpp \
        strciphr.cpp \
        tea.cpp \
        tftables.cpp \
        tiger.cpp \
        tigertab.cpp \
        trdlocal.cpp \
        ttmac.cpp \
        twofish.cpp \
        vmac.cpp \
        wait.cpp \
        wake.cpp \
        whrlpool.cpp \
        winpipes.cpp \
        xtr.cpp \
        xtrcrypt.cpp \
        zdeflate.cpp \
        zinflate.cpp \
        zlib.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)

include $(BUILD_STATIC_LIBRARY)

修改proj.android/jni/Application.mk文件內的APP_CPPFLAGS(添加-fexceptions參數)

APP_CPPFLAGS := -frtti -fexceptions -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char

修改proj.android/jni/Android.mk文件,主要修改有四處:

添加external目錄

$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)
#add cryptopp
$(call import-add-path,$(LOCAL_PATH)/../../external)

LOCAL_C_INCLUDES,添加external

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
					$(LOCAL_PATH)/../../external

增加引用cryptopp_static

LOCAL_STATIC_LIBRARIES := cocos2dx_static
#add cryptopp
LOCAL_STATIC_LIBRARIES += cryptopp_static

增加import-module

$(call import-module,.)
#add cryptopp
$(call import-module,cryptopp)

現在就可以繼續測試android平臺是否成功。
將項目打包到手機上,連接用Eclipse,看LOGCAT打印,如果也出現了HelloWorld MD5:68E109F0F40CA72A15E05CC22786F8E6則表明成功了

ios平臺

由於本人沒有Mac和蘋果手機所以沒有進行測試所以,暫時無法分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章