使用RenderWare如何加密解密已经放出去的贴图

原创 2006年06月18日 13:52:00

  我们目前这个项目,因为某些原因,不能使用SFSSingle File System,单文件系统。如果用SFS的话就不需要担心资源加密了。对于一般用户来说,放出去的资源,比如dffanmrws,用户都不知道如何查看这些东西,但是贴图呢,如果没有加密,用ACDSee就可以看了,这样,有些不太想让用户知道的东西,比如过几天要推的新商品,就被他们提前知道长什么样了。

    要解密一张加密过贴图,一般的做法是从磁盘中读进来,以二进制方式,然后解密,再把结果写回磁盘,然后使用RwTextureRead,因为这时候RenderWare才认得贴图文件的格式,Read进来以后再把结果删掉,防止被用户看见。整个过程需要2次磁盘读,1次磁盘写,1次文件删除,忒慢了,将load资源的过程整整加长了大约2倍,玩家会忍受不了的。

    我从RenderWare Support找过相关的咨询,最后决定使用文件系统,就是挂接一个新的内存文件系统进去,专门加密解密贴图。整个过程是这样:一般example运行的时候会先做一件事情,就是调用RwImageRegisterImageFormat来注册贴图的RW函数,对于png格式来说,一般是RtPNGImageReadRtPNGImageWrite 。先把Read的函数替换掉,换成自己的函数,这样使用RwTextureRead的时候就会进自己的函数,这时候会传进来一个filename,把filename加上前缀,这个前缀就是新的文件系统的deviceName,可以把它叫做"Mem:"。举个例子,比如要读的贴图叫"data/GUI/aa.png",我们现在让它变成"Mem:/data/GUI/aa.png",再调用RtPNGImageRead,把新的文件名传给它,这个时候,新的内存文件系统就起作用了。在这个Mem FileSystem中,Open函数先把贴图以二进制格式读进来,判断它有没有被加密过,如果没有,则加密,否则在内存中解密,接下来图片解析过程都是Memory Read,因为属于这个FileSystem的文件都是通过这个FileSystem中的函数来RW的。这样没有被加密过的贴图会在第一次读到的时候被加密,以后再也不会加密,而加密过的贴图只需要一次磁盘Read

    文件系统的例子可以参考example下的pakfile,挂接一个文件系统需要程序提供很多函数,一些不用的函数最好也提供一下,函数体是空的就可以,比如sync,不要让它是NULL。这么说是因为我们在项目中使用了RWARenderWare Audio),RWA的一些程序需要调用RtFSManagerSyncAllFiles,这个函数会sync所有文件系统上的所有函数,通过调用各个FileSystemsync函数,如果sync函数为NULL,就挂了。

 PS:我们用的贴图一般都是png格式,png是无损压缩的,放出去的时候一般都是减色至256色,用的工具是pngquant。还有一个工具叫pngcrush,可以减小png文件的大小,好像也是减色的,具体我忘了:(,可以去sourceforge上下到。如果程序减色的结果不好,可以让美术手动减色。




版权声明:本文为博主原创文章,未经博主允许不得转载。

sqlServer存储过程的加密和解密方法

 ★加密存储过程: IF EXISTS (SELECT name FROM sysobjects WHERE name = 'encrypt_this' AND type = 'P'...
  • u013597888
  • u013597888
  • 2015年08月02日 14:25
  • 2207

png图片结构分析与加密解密原理

PNG文件格式分为PNG-24和PNG-8,其最大的区别是PNG-24是用24位来保存一个像素值,是真彩色,而PNG-8是用8位索引值来在调色盘 中索引一个颜色,因为一个索引值的最大上限为2的8次方既...
  • u013790419
  • u013790419
  • 2014年12月08日 14:23
  • 3025

混合加密算法(RSA和DES)

一、混合加密的理由   a、前面提及了RSA加解密算法和DES加解密算法这两种加解密算法,由于随着计算机系统能力的不断发展,DES的安全性比它刚出现时会弱得多,追溯历史破解DES的案例层出不穷,一台实...
  • w412748643
  • w412748643
  • 2015年06月01日 15:52
  • 2033

AES-128,192,256位加密解密,其中128位已经测试过

package com.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutpu...
  • tianshi1017
  • tianshi1017
  • 2013年06月19日 15:49
  • 2657

加密解密方法MD5/SHA1,DSA,DESede/DES,Diffie-Hellman的使用

  • 2010年06月09日 10:46
  • 4KB
  • 下载

JAVA 使用数字证书加密解密文件

  • 2013年10月31日 17:05
  • 1.96MB
  • 下载

java加密解密技术代码及使用

  • 2017年06月22日 08:47
  • 5KB
  • 下载

使用windows crypto API加密解密

本文转自: http://ticktick.blog.51cto.com/823160/168538      最近在学习使用windows crypto API 对数据进行加密和解密,有些收获和经验...
  • kamaliang
  • kamaliang
  • 2011年07月15日 15:28
  • 5787

如何使用C#加密解密XML文档

 如何使用C#加密解密XML文档       .NETFramework 提供了几种类,可用于对 XML 数据进行加密和解密,以及创建和验证 XML 数字签名。这些类提供了维护 XML 数据的保密性和...
  • woyaowenzi
  • woyaowenzi
  • 2011年06月29日 00:20
  • 11708

Java使用RSA加密解密签名及校验

由于项目要用到非对称加密解密签名校验什么的,于是参考《Java加密解密的艺术》写一个RSA进行加密解密签名及校验的Demo,代码很简单,特此分享!RSA加密解密类:package com.ihep; ...
  • wangqiuyun
  • wangqiuyun
  • 2014年12月25日 11:37
  • 111543
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用RenderWare如何加密解密已经放出去的贴图
举报原因:
原因补充:

(最多只允许输入30个字)