Android简单加密保护自有图片资源

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

现在大部分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 }
复制代码

 

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



本文转自java豆子博客园博客,原文链接:http://www.cnblogs.com/error404/archive/2013/06/03/3115492.html,如需转载请自行联系原作者

相关文章
|
19天前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
39 20
Android经典面试题之图片Bitmap怎么做优化
|
5月前
|
Android开发
Android通过手势(多点)缩放和拖拽图片
Android通过手势(多点)缩放和拖拽图片
45 4
|
5月前
|
Java Android开发
android 下载图片的问题
android 下载图片的问题
39 3
|
2月前
|
算法 安全 数据安全/隐私保护
Android经典实战之常见的移动端加密算法和用kotlin进行AES-256加密和解密
本文介绍了移动端开发中常用的数据加密算法,包括对称加密(如 AES 和 DES)、非对称加密(如 RSA)、散列算法(如 SHA-256 和 MD5)及消息认证码(如 HMAC)。重点讲解了如何使用 Kotlin 实现 AES-256 的加密和解密,并提供了详细的代码示例。通过生成密钥、加密和解密数据等步骤,展示了如何在 Kotlin 项目中实现数据的安全加密。
58 1
|
2月前
|
算法 安全 数据安全/隐私保护
Android经典实战之常见的移动端加密算法和用kotlin进行AES-256加密和解密
本文介绍了移动端开发中常用的数据加密算法,包括对称加密(如 AES 和 DES)、非对称加密(如 RSA)、散列算法(如 SHA-256 和 MD5)及消息认证码(如 HMAC)。重点展示了如何使用 Kotlin 实现 AES-256 的加密和解密,提供了详细的代码示例。
39 2
|
2月前
|
数据处理 开发工具 数据安全/隐私保护
Android平台RTMP推送|轻量级RTSP服务|GB28181接入之文字、png图片水印的精进之路
本文探讨了Android平台上推流模块中添加文字与PNG水印的技术演进。自2015年起,为了满足应急指挥及安防领域的需求,逐步发展出三代水印技术:第一代为静态文字与图像水印;第二代实现了动态更新水印内容的能力,例如实时位置与时间信息;至第三代,则优化了数据传输效率,直接使用Bitmap对象传递水印数据至JNI层,减少了内存拷贝次数。这些迭代不仅提升了用户体验和技术效率,也体现了开发者追求极致与不断创新的精神。
|
2月前
|
自然语言处理 定位技术 API
Android经典实战之如何获取图片的经纬度以及如何根据经纬度获取对应的地点名称
本文介绍如何在Android中从图片提取地理位置信息并转换为地址。首先利用`ExifInterface`获取图片内的经纬度,然后通过`Geocoder`将经纬度转为地址。注意操作需在子线程进行且考虑多语言支持。
142 4
|
2月前
|
监控 Java 开发工具
### 绝招揭秘!Android平台GB28181设备接入端如何实现资源占用和性能消耗的极限瘦身?
【8月更文挑战第14天】本文介绍在Android平台优化GB28181标准下设备接入的性能方法,涵盖环境搭建、SDK集成与初始化。重点讲解内存管理技巧如软引用、按需加载资源,以及通过硬件加速解码视频数据和图像缩放来减轻CPU与GPU负担。同时采用线程池异步处理视频流,确保UI流畅性。这些策略有助于提高应用效率和用户体验。
31 0
|
2月前
|
XML 前端开发 Android开发
Android经典实战之Kotlin中实现圆角图片和圆形图片
本文介绍两种实现圆角图像视图的方法。第一种是通过自定义Kotlin `AppCompatImageView`,重写`onDraw`方法使用`Canvas`和`Path`进行圆角剪裁。第二种利用Android Material库中的`ShapeableImageView`,简单配置即可实现圆角效果。两种方法均易于实现且提供动态调整圆角半径的功能。
38 0
|
4月前
|
JSON 编解码 Apache
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
45 1
下一篇
无影云桌面