cc随笔:简单的自定义图片加密
2016-11-21 09:56
106 查看
在进行cocos 2dx 项目开发时,难免要考虑的一点就是,怕自己的作品被窃取,特别是图片,这里记录一下自己对图片简单的做一下加密工作。
因为能力有限,还不能像大牛些一样,写一个图片加密软件,这里我是直接在代码上实现的(其实大牛做的加密软件,其逻辑基本是相同的,只是加密的算法不同而已,我这里加密逻辑过于简单,只是做一下价单的插入工作而已):
1、选择一张图片,png、jpg、pvr等等;
ruiwen.png
2、代码实现加密:
3、在项目中找一个地方调用该方法,点击运行该项目:
运行成功后,可查看resourse目录下,多了一个.abc文件,该文件就是经过加密过了的图片
4、加密是可以了,但是怎样使用呢?接下来我们可以了解一下cocos 2dx 中的TextureCache是怎样实现的;
这里可以追中代码,发现在cocos 2dx 提供的源代码:
CCImage.cpp文件中存在
5、接下里就是在项目中使用了
直接调用:
TextureCache::getInstance()->addImage("ruiwen.abc");
或使用
spriteframecache就可以了
(纯属自己个人观点,能力有限,可能有错误的地方,希望各位指点)
因为能力有限,还不能像大牛些一样,写一个图片加密软件,这里我是直接在代码上实现的(其实大牛做的加密软件,其逻辑基本是相同的,只是加密的算法不同而已,我这里加密逻辑过于简单,只是做一下价单的插入工作而已):
1、选择一张图片,png、jpg、pvr等等;
ruiwen.png
2、代码实现加密:
bool recodeFileByName(string pFileName) { unsigned long nSize = 0; //获取图片的字节数组,并返回该文件的长度 unsigned char* pBuffer = FileUtils::getInstance()->getFileData( pFileName.c_str(), "rb", (ssize_t*)&nSize); //新建一个数组 unsigned char* newBuf = new unsigned char[nSize]; int newblen = nSize; //设置所要加密的字符串 unsigned char key[] = "jiamidekey"; if (pBuffer != NULL&&nSize > 0) { for (int i = 0; i < nSize; i++) { //遍历数组,对每一个字节进行加法处理,这里的加密算法可以自己定义 newBuf[i] = pBuffer[i] + key[i % 10]; } //获取文件名 string savepath = pFileName; //去除文件格式 savepath = savepath.substr(0, savepath.length() - 4); //如果该文件为png格式的 if (pFileName.find(".png") != std::string::npos) { //将该文件存储为.abc格式(这里可以自定义格式) savepath = savepath + ".abc"; } //打开文件 savepath(如:ruiwen.abc),这里如果不存在该文件,则会自动生成对应文件 FILE *fp = fopen(savepath.c_str(), "wb+"); //将数据写入文件中 fwrite(newBuf, 1, newblen, fp); //关闭 fclose(fp); return true; } }
3、在项目中找一个地方调用该方法,点击运行该项目:
运行成功后,可查看resourse目录下,多了一个.abc文件,该文件就是经过加密过了的图片
4、加密是可以了,但是怎样使用呢?接下来我们可以了解一下cocos 2dx 中的TextureCache是怎样实现的;
这里可以追中代码,发现在cocos 2dx 提供的源代码:
CCImage.cpp文件中存在
bool Image::initWithImageData(const unsigned char * data, ssize_t dataLen) { .................; _fileType = detectFormat(unpackedData, unpackedLen);//这里面需增加一个对.abc文件的判断方法,返回ABC格式 switch (_fileType) { case Format::PNG: ret = initWithPngData(unpackedData, unpackedLen); break; case Format::JPG: ret = initWithJpgData(unpackedData, unpackedLen); break; case Format::ABC://在这里可以新增对.abc格式的处理方法(怎样实现可以对照png或jpg格式来操作,步骤差不多的) ret = decrypt(unpackedData, unpackedLen); break; default: break; } if(unpackedData != data) { free(unpackedData); } } while (0); return ret; } bool Image::decrypt(const unsigned char* unpackedData, ssize_t unpackedLen) { bool ret = false; unsigned char* newBuf = new unsigned char[unpackedLen]; unsigned char key[] = "jiamidekey"; for (int j = 0; j < unpackedLen; j++) { newBuf[j] = unpackedData[j] - key[i % 10]; } if (isPng(newBuf, unpackedLen)) { _fileType = Format::PNG; ret = initWithPngData(newBuf, unpackedLen); } else if (isJpg(newBuf, unpackedLen)) { _fileType = Format::JPG; ret = initWithJpgData(newBuf, unpackedLen); } return ret; }
5、接下里就是在项目中使用了
直接调用:
TextureCache::getInstance()->addImage("ruiwen.abc");
或使用
spriteframecache就可以了
(纯属自己个人观点,能力有限,可能有错误的地方,希望各位指点)
相关文章推荐
- [EntLib]微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—下篇
- 微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—下篇
- iOS基础8:自定义MyData/自定义SQLite用于网络判断,版本判断,图片缓存处理,下载或者上传的GET或POST请求,加密手段,.数据解析
- 【Android界面实现】自定义Gallery控件实现简单3D图片浏览器
- 自定义委托,事件,参数的简单随笔
- 自定义圆形图片ImageView的简单实现效果
- Android简单加密保护自有图片资源
- 自定义一个简单的可以加载网络图片的ImageView
- AJ学IOS(44)之网易彩票自定义图片在右边的Button_弹出view_ios6,7简单适配
- 简单的对图片文件进行加密解密
- 简单处理加密图片 (改变图片首地址)
- 简单图片加密
- 【随笔】设置title标题图标为自定义图片
- js简单加密解密演示(可以自定义密码因子)
- 微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇
- Android 游戏引擎libgdx 图片简单加密解密 生成Pixmap
- 简单的自定义圆形图片(不能与BitmapUtils一起使用)
- 自定义简单的Toast,可自行修改文字、图片、样式
- Android 游戏引擎libgdx 图片简单加密解密 生成Pixmap
- 猫猫学iOS(四十四)之网易彩票自定义图片在右边的Button_弹出view_ios6,7简单适配