Android 游戏引擎libgdx 图片简单加密解密 生成Pixmap
Android的APK只要解压缩就可以得到里面的资源文件,这显得有些过于开放了。
很多时候我们发现一些厂家的产品都将资源文件进行了处理,即加密了。
接下来我们就对图片文件进行简单加密解密操作。
一、准备一张图片,因为是在libgdx中使用,所以长宽必须是2的幂次方。
二、简单异或加密
String fileName = "image.jpg";//图片名称 String key = "test";//密码 RandomAccessFile raf = null; try { raf = new RandomAccessFile(fileName, "rw"); int value = -1; while ((value = raf.read()) != -1) { long pointer = raf.getFilePointer(); raf.seek(pointer - 1); raf.write(value ^ key.hashCode()); //每个字节异或密码,请保证解密时密码前后相同 } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { raf.close(); } catch (Exception e) { e.printStackTrace(); } }
三、加密后的图片我们将无法再预览。我们可以将图片的扩展名改成dat,进一步的混淆。
四、解密并显示
public void Load(){ String key = "test"; InputStream is = null; int value = -1; byte[] bs = new byte[76583]; int cx = 0; try { is = this.getAssets().open("image.dat"); while ((value = is.read()) != -1) { bs[cx] = (byte) (value ^ key.hashCode()); cx++; } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } pixmap = new Pixmap(bs, 0, bs.length); }
解密与加密相同,都是每字节异或密码。
byte[] bs = new byte[76583];
这里我们需要自定义内存大小,查看文件的属性,查看大小。
五、查看源码 DwinterGdxDemo01
导入后请注意更改引用包
作品发布:dwintergame.com
个人开发盈利方案: 传送门
本文版权归作者D.Winter和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。