现在大部分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

Android简单加密保护自有图片资源的更多相关文章

  1. .Net加密保护工具分析介绍

    本文主要介绍一些dotNet加密保护工具的原理以及就其脱壳进行简单探讨. remotesoft protector.maxtocode..Net Reactor.Cliprotector.themid ...

  2. .NET 产品版权保护方案 (.NET源码加密保护) (转载)

    说 明:你希望自己用.net辛辛苦苦做出来的软件被人轻易破解吗?你希望自己花了大量人力物力用.net开发出来的产品被竞争对手轻易获取核心代码吗?这是 一篇比较详尽地介绍如何保护自己的.net源代码的文 ...

  3. [破解] DRM-内容数据版权加密保护技术学习(上):视频文件打包实现

    1. DRM介绍: DRM,英文全称Digital Rights Management, 可以翻译为:内容数字版权加密保护技术. DRM技术的工作原理是,首先建立数字节目授权中心.编码压缩后的数字节目 ...

  4. Android 安全加密

    Android 安全加密 引言     对称加密.非对称加密.消息摘要.数字签名等知识都是为了理解数字证书工作原理而作为一个预备知识.数字证书是密码学里的终极武器,是人类几千年历史总结的智慧的结晶,只 ...

  5. 常见dotNet加密保护工具分析介绍(转)

    本文主要介绍一些dotNet加密保护工具的原理以及就其脱壳进行简单探讨.remotesoft protector.maxtocode..Net Reactor.Cliprotector  .themi ...

  6. [C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护)

    [C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护) 标签: .net加密产品c#dll工具 2011-03-24 21:06 27009人阅读 评论(13) 收藏 举报 分类: C ...

  7. 2018-8-10-用-sim-卡加密保护资金

    title author date CreateTime categories 用 sim 卡加密保护资金 lindexi 2018-08-10 19:16:52 +0800 2018-2-13 17 ...

  8. SpringBoot自定义classloader加密保护class文件

    背景 最近针对公司框架进行关键业务代码进行加密处理,防止通过jd-gui等反编译工具能够轻松还原工程代码,相关混淆方案配置使用比较复杂且针对springboot项目问题较多,所以针对class文件加密 ...

  9. 用C语言简单加密解密

    使用char表示的字符型数据,在本质上与我们前面介绍的整型数据并无太大的区别,只是char类型占用的内存字节数更小,能够表示的数据范围更小而已.在使用上,char被专门用来表示C语言的字符集中的各种字 ...

随机推荐

  1. LINQ的Except方法

    在两个集合中,左边集合减去右边集合的元素: source code: List<int> a = new List<int>{ { }, { }, { } }; List< ...

  2. 开始MS SQL Server 2016之旅

    下班前一刻,把MS SQL Server 2016安装好,国庆回来之后,就可以学习之旅......

  3. 【要什么自行车】ASP.NET MVC4笔记02:上传文件 uploadify 组件使用

    参考:http://www.cnblogs.com/luotaoyeah/p/3321070.html 1.下载 uploadify 组件,copy至 Content文件夹 <link href ...

  4. C#的变迁史 - C# 5.0 之并行编程总结篇

    C# 5.0 搭载于.NET 4.5和VS2012之上. 同步操作既简单又方便,我们平时都用它.但是对于某些情况,使用同步代码会严重影响程序的可响应性,通常来说就是影响程序性能.这些情况下,我们通常是 ...

  5. vs2012运行项目报未能加载文件或程序集“System.Web.Mvc, Version=4.0.0.1,Culture=neutral”问题和解决方法

    原先本地项目版本(4.0.0.1)高于服务器版本(4.0.0.0),本地项目改成服务器版本4.0.0.0时,发布后的项目报这个错误

  6. 新平台,新版本,ComponentOne 持续发力

    我们很高兴宣布2016年 V1 版本发布了,可免费下载试用. 今年ComponentOne 将聚焦WinForm.WPF.MVC.UWP平台和核心控件Flex家族. 本次发布主要包括UWP平台:Win ...

  7. jquery属性选择器

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. MySQL: Tree-Hierarchical query

             http://dba.stackexchange.com/questions/30021/mysql-tree-hierarchical-query     No problem. ...

  9. python-ldap实现登录案例

    ldap_config = { 'ldap_path': 'ldap://xx.xx.xx.xx:389', 'base_dn': 'ou=users,dc=ledo,dc=com', 'ldap_u ...

  10. Android开发中Eclispe相关问题及相应解决(持续更新)

    1.Eclipse项目中的Android Private Libraries没有自动生成. 一般而言,在Android开发中,项目中引用到的jar包会放到项目目录中的libs中,引入库会放到Andro ...