cocos2dx 使用 crypto++

cocos2dx 使用 crypto++,第1张

概述在ios上使用加密解密,crypto++是一个好选择,配置过程如下: 我在github上找到了CryptoPP-for-iOS,地址:https://github.com/3ign0n/CryptoPP-for-iOS,下载后发现工程里没有crypto++,需要执行其中的external/scripts/build-cryptopp.sh脚本,脚本会下载http://www.cryptopp.co 在ios上使用加密解密,crypto++是一个好选择,配置过程如下:
我在github上找到了CryptopP-for-iOS,地址:https://github.com/3ign0n/CryptopP-for-iOS,下载后发现工程里没有crypto++,需要执行其中的external/scripts/build-cryptopp.sh脚本,脚本会下载http://www.cryptopp.com/cryptopp561.zip,这个是crypto++代码,但是在天朝,下载会失败,原因不言而喻,想办法下载吧!
cryptopp561.zip下载后,我没有编译,将其中的代码复制到工程中, 将其中的valIDat1.cpp,valIDat2.cpp,valIDat3.cpp,bench.cpp,bench2.cpp删除, 然后将-DCRYPtopP_disABLE_ASM-DCRYPtopP_disABLE_SSE2两个宏定义加到工程中,原因是crypto++内嵌了很多汇编,这个我们不需要。 开始编译,过程中提示cocos2dx的zip_support/ioAPI.h中存在错误,原因是其包含了zlib.h,而crypto++中存在同名文件, ioAPI.h中是 #include "zlib.h" 改成 #include <zlib.h> 编译通过。
在androID工程上编译流程大同小异,在jni/AndroID.mk 中增加 CPPFLAGS += -DCRYPtopP_disABLE_ASM-DCRYPtopP_disABLE_SSE2 在jni/Application.mk 中增加 APP_STL := gnustl_static APP_CPPFLAGS := -frtti -fexceptions 编译通过。
写了个使用RC2算法编解码的程序测试一下: cRC2Test.h

#include "rc2.h"

using namespace CryptopP;


//RC2加密解密类

class cRC2Test

{

public:

//设置key

static voID setKey(const unsigned char* pKey);

//加密

static std::string encode(const std::string& rStr);

//解密

static std::string decode(const std::string& rStr);

private:

//加密RC2

static voID encodeBlock(unsigned char* pData,unsigned char* pOut);

//解密RC2

static voID decodeBlock(unsigned char* pData,unsigned char* pOut);

//RC2 key

static unsigned char sm_cKey[RC2::DEFAulT_KEYLENGTH];

//RC2加密类

static RC2Encryption sm_rcEncr;

//RC2解密类

static RC2Decryption sm_rcDecr;

};


cRC2Test.cpp


#include<vector>

#include<string>

using namespacestd;


//静态变量定义

unsigned char cRC2Test::sm_cKey[RC2::DEFAulT_KEYLENGTH] = {0,};

RC2EncryptioncRC2Test::sm_rcEncr;

RC2DecryptioncRC2Test::sm_rcDecr;


voID cRC2Test::setKey(const unsigned char* pKey)

{

memset(sm_cKey, 0,sizeof(sm_cKey));

//保存key

memcpy(sm_cKey,pKey, RC2::DEFAulT_KEYLENGTH);

//对加密器与解密器设置key

sm_rcEncr.SetKey(sm_cKey, RC2::DEFAulT_KEYLENGTH);

sm_rcDecr.SetKey(sm_cKey, RC2::DEFAulT_KEYLENGTH);

}


std::string cRC2Test::encode(const std::string& rStr)

{

size_t strIndex = 0;

size_t strLen =rStr.size();

//保存加密后的数据

vector<unsigned char> vBuffer;

//保存加密后的临时数据块

unsigned char rcBlock[RC2::BLOCKSIZE];

unsigned char *ptr = (unsigned char*)rStr.c_str();

//遍历字符串

while(strIndex <strLen) {

memset(rcBlock,0,RC2::BLOCKSIZE);

//加密一块数据

encodeBlock(&ptr[strIndex],rcBlock);

//保存加密结果

vBuffer.insert(vBuffer.end(),rcBlock,rcBlock+RC2::BLOCKSIZE);

strIndex += RC2::BLOCKSIZE;

}

return string(vBuffer.begin(),vBuffer.end());

}


std::string cRC2Test::decode(const std::string& rStr)

{

size_t strIndex = 0;

size_t strLen =rStr.size();

//保存解密后的数据

vector<unsigned char> vBuffer;

//保存解密后的临时数据块

unsigned char rcOut[32];

unsigned char *ptr = (unsigned char*)rStr.c_str();

//遍历字符串

while(strIndex <strLen) {

memset(rcOut,sizeof(rcOut));

//解密一块数据

decodeBlock(&ptr[strIndex],rcOut);

//保存解密结果

vBuffer.insert(vBuffer.end(),rcOut,rcOut+strlen((char*)rcOut));

strIndex += RC2::BLOCKSIZE;

}

return string(vBuffer.begin(),vBuffer.end());

}


voIDcRC2Test::encodeBlock(unsigned char* pData,unsigned char* pOut)

{

sm_rcEncr.ProcessBlock(pData,pOut);

}


voIDcRC2Test::decodeBlock(unsigned char* pData,unsigned char* pOut)

{

sm_rcDecr.ProcessBlock(pData,pOut);

}


测试代码: main.cpp

unsigned char pkey[RC2::DEFAulT_KEYLENGTH];

stringtestData = "1234567890测试";

cRC2Test::setKey(pkey);

stringsEncode = cRC2Test::encode(testData);

cout<<cRC2Test::decode(sEncode);



在ios与androID上测试通过。 总结

以上是内存溢出为你收集整理的cocos2dx 使用 crypto++全部内容,希望文章能够帮你解决cocos2dx 使用 crypto++所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1062323.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存