android - 通过位切换混淆 JPG - 在 Android 上读取性能

标签 android performance image-processing

摘要:

  • 从文件中读取图片
  • 使用切换位使预览工具无法使用
  • 不能使用加密,需要很大的力量
  • 我可以优化下面的代码,还是有更好的方法

更长的描述:

我正在尝试改进我的代码,也许您对以下情况有一些想法或改进。请注意,我既不试图打败中央情报局,也不关心是否有人“破坏”了加密。

背景很简单:我的应用程序将服务器上的一堆图像加载到 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/

相关文章:

opencv - 如何在 OpenCV 中估计二维相似性变换(线性共形、非反射相似性)?

ruby-on-rails - 使用CMYK的Rmagick/ImageMagick图像创建

android - 在android中接收多个通知并删除通知

c++ - C++中的大量线程和效率

image - matlab - VideoReader 帧未准确解码

javascript - 将*所有* javascript 变量(甚至未定义)作为函数参数传递的优缺点是什么?

python - 如何比较 python 函数的性能?

android - 方法 findViewByID(int) 未定义类型 new View.OnClickListener(){}

android - 使用 rxjava2 遍历列表

android - 从 facebook SDK 3.15 获取完整的好友列表