zoukankan      html  css  js  c++  java
  • Android简单加密保护自有图片资源

    现在大部分android应用的图片资源,被反编译后就可以直接拿来用,如果不想让自己的图片资源直接被反编译后使用,首先想到的应该是把图片加密。这里笔者抛砖引玉,草草写了一个对图片进行简单加密的方法,希望对各位看官有用。

    首先是加密部分,这里使用的是简单的异或来将图片进行加密。新建一个java project或者干脆直接用文本文件写下下面的代码,然后在命令行执行,代码如下:

    复制代码
     1 import java.io.File;
     2 
     3 import javax.imageio.stream.FileImageInputStream;
     4 import javax.imageio.stream.FileImageOutputStream;
     5 import javax.imageio.stream.ImageInputStream;
     6 import javax.imageio.stream.ImageOutputStream;
     7 
     8 public class EncriptDemo {
     9 
    10     public static final int XOR_CONST = 0X99; //密钥
    11 
    12     /**
    13      * @param args
    14      */
    15     public static void main(String[] args) {
    16 
    17         File load = new File("/home/jade/桌面/loading.png");
    18         File loaddest = new File("/home/jade/桌面/loading.dat");
    19         File loadd = new File("/home/jade/桌面/loading_depr.png");
    20 
    21         try {
    22             encrImg(load, loaddest);
    23             encrImg(loaddest, loadd);
    24         } catch (Exception e) {
    25             e.printStackTrace();
    26         }
    27     }
    28 
    29     public static void encrImg(File src, File dest) throws Exception {
    30         ImageInputStream fis = new FileImageInputStream(src);
    31         ImageOutputStream fos = new FileImageOutputStream(dest);
    32 
    33         int read;
    34         while ((read = fis.read()) > -1) {
    35             fos.write(read ^ XOR_CONST);
    36         }
    37         fos.flush();
    38         fos.close();
    39         fis.close();
    40     }
    41 
    42 }
    复制代码

    上 面的代码并没有进行文件是否存在的判断,因为这段代码是自己对文件进行加密,所以文件是否存在自己检查下即可。熟悉异或的朋友应该想得到,其实上面的 encrImg(File src, File dest)方法既可以做加密,又可以做解密,在main里做了两次调用,第一次用来加密,第二次进行解密。这样加密的程序就完成了,接下来看一下在 android中解密的方法(上面的加密代码,使用了javax.imageio.stream包中的相关类,故默认不能在android工程中执行)。

    把刚刚加密好的loading.dat文件拷贝到android项目的assets文件夹下,然后在layout中添加一个ImageView,id为img,这样在activity中就可以执行以下代码:

    复制代码
    1 ImageView img = (ImageView) findViewById(R.id.img);
    2 Bitmap bitmap = ImageAdapter.readBitmap(this, "loading.dat");
    3 if(bitmap != null) {
    4     img.setImageBitmap(bitmap);
    5 } else {
    6     System.out.println("图片为空");
    7 }
    复制代码

    这里调用了ImageAdapter的静态方法readBitmap,该方法读取笔者这里仅仅是一个demo,所以没有考虑ANR等处理,正式项目最好是将图片加载解密部分放在独立的线程中执行。ImageAdapter的代码如下:

    复制代码
     1 import java.io.IOException;
     2 import java.io.InputStream;
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import android.content.Context;
     7 import android.graphics.Bitmap;
     8 import android.graphics.BitmapFactory;
     9 
    10 public class ImageAdapter { 
    11 
    12     public static Bitmap readBitmap(Context context, String fileName) {
    13         Bitmap bitmap = null;
    14         List list = new ArrayList(); 
    15         try {
    16             InputStream is = context.getAssets().open(fileName);
    17             int read;
    18                 while ((read = is.read()) > -1) {
    19                 read = read ^ 0X99;
    20                 list.add((byte)read);
    21                 }
    22 
    23                 byte[] arr = new byte[list.size()];
    24                 int i = 0;
    25                 for(Byte item : list) {
    26                 arr[i++] = item;
    27                 }
    28             bitmap = BitmapFactory.decodeByteArray(arr, 0, list.size());
    29             System.out.println(bitmap);
    30         } catch (IOException e) {
    31             e.printStackTrace();
    32         }
    33         return bitmap;
    34     }
    35 
    36 }
    复制代码

    笔者的方法,并不是最好的方法,这里只是抛砖引玉,给需要保护自己的图片资源的朋友一个简单的思路。

    http://www.cnblogs.com/error404/archive/2013/06/03/3115492.html

  • 相关阅读:
    45
    布里斯班初体验
    走出你的舒适区
    Homebrew- MAC上的包管理利器
    Java经典类库-Guava中的函数式编程讲解
    使用WebDriver遇到的那些坑
    CheckStyle, 强制你遵循编码规范
    利用php的register_shutdown_function来记录php的输出日志
    PHP-redis中文文档
    php中set_time_limit()函数运用
  • 原文地址:https://www.cnblogs.com/webenh/p/5618989.html
Copyright © 2011-2022 走看看