废话不多说,直接进入正题。
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和苹果手机所以没有进行测试所以,暂时无法分享。