摘要:
- 从文件中读取图片
- 使用切换位使预览工具无法使用
- 不能使用加密,需要很大的力量
- 我可以优化下面的代码,还是有更好的方法
更长的描述:
我正在尝试改进我的代码,也许您对以下情况有一些想法或改进。请注意,我既不试图打败中央情报局,也不关心是否有人“破坏”了加密。
背景很简单:我的应用程序将服务器上的一堆图像加载到 SD 卡上的文件夹中。 我不希望图像是简单的 JPG 文件,因为在这种情况下,媒体索引器会将它们列在库中,用户只需将整个文件夹复制到他的硬盘即可。
显而易见的方法是加密。但是完全成熟的 AES 或其他加密没有意义,原因有两个:我必须将 key 存储在应用程序中,这样任何人都可以通过一些努力获得 key 。而且动态解密图片的价格太高了(我们说的是一个包含 30 张 200kB 图片的画廊)。
所以我决定切换图像中的一些位。这使得图像工具(或预览)无法读取格式,但在读取图像时很容易撤消。对于“加密”,我使用了一些 C# 工具,“解密”行如下:
public class CustomInputStream extends InputStream {
private String _fileName;
private BufferedInputStream _stream;
public CustomInputStream(String fileName) {
_fileName = fileName;
}
public void Open() throws IOException {
int len = (int) new File(_fileName).length();
_stream = new BufferedInputStream(new FileInputStream(_fileName), len);
}
@Override
public int read() throws IOException {
int value = _stream.read() ^ (1 << 7);
return value;
}
@Override
public void close() throws IOException {
_stream.close();
}
}
我也尝试覆盖其他方法(读取超过一个字节),但这会杀死 BitmapFactory - 不知道为什么,也许我做错了什么。下面是创建图像位图的代码:
Bitmap bitmap = null;
try {
InputStream i = CryptoProvider.GetInstance().GetDecoderStream(path);
bitmap = BitmapFactory.decodeStream(i);
i.close();
} catch (Exception e1) {
_logger.Error("Cant load image " + path + " ERROR " + e1);
}
if (bitmap == null) {
_logger.Error("Image is NULL for path " + path);
}
return bitmap;
您对所选方法有任何反馈吗?有什么方法可以优化它,还是针对 Android 设备采用完全不同的方法?
最佳答案
您可以尝试将字节流与快速 PRNG 的输出进行异或运算。只需为每个文件使用不同的种子即可。
注意:正如问题中已经指出的那样,这些方法很容易绕过。
关于android - 通过位切换混淆 JPG - 在 Android 上读取性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8608192/