通过位切换混淆JPG-Android上的读取性能
摘要:通过位切换混淆JPG-Android上的读取性能,android,performance,image-processing,Android,Performance,Image Processing,摘要: 从文件中读取图像 通过切换位使预览工具无法使用 无法使用加密,需要的电量太大 我可以优化下面的代码,还是有更好的方法 详细描述: 我正在努力改进我的代码,也许您对以下情况有一些想法或改进。请注意,我既不想打败中情局,也不在乎是否有人“刹车”加密 背景很简单:我的应用程序将一堆图像从服务器加载到SD卡上的文件夹中我不希望图像是简单的JPG文件,因为在这种情况下,媒体索引器会在库中列出它们,用户只需将整个文件夹复制到硬盘上即可 显而易见的方法是加密。但是全面的AES或其他加密是没有意义的
- 从文件中读取图像
- 通过切换位使预览工具无法使用
- 无法使用加密,需要的电量太大
- 我可以优化下面的代码,还是有更好的方法
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();
}
}
你对所选择的方法有什么反馈吗?有没有办法对其进行优化,或者对Android设备采用完全不同的方法?您可以尝试使用快速PRNG的输出对ByTestStream进行XORing。只需为每个文件使用不同的种子,您就完成了
注意:正如问题中已经提到的,这种方法很容易绕过。您可以尝试使用快速PRNG的输出对ByTestStream进行XORing。只需为每个文件使用不同的种子,您就完成了
注意:正如问题中已经提到的,这种方法很容易绕过。老实说,如果您需要在中执行所有操作,请确保它没有索引,并且在没有文件扩展名的情况下存储它。否则,每次强制应用程序从外部服务器下载。抱歉,不可能。总下载量为150MB,超过1000张图片。没有文件扩展名这么简单,普通用户只需进行批量重命名即可-好的,只有5%的用户知道这一点,但仍然如此。在图片上稍微切换一下,99.99%的用户无法使用这些图片-程序员可以解决这个问题,但他们无论如何可以通过反编译应用程序-我只是想找到合适的“版权保护级别”-这很糟糕,但你必须赚些钱:-)也许你的问题是超过150MB的图片。。。这是一个真正的问题,它的目的是:-)这是一个有1000多张高质量图片的口述记录,应该可以脱机工作。如果只有几个,我不在乎有没有人复制它们。但是我们为这些图片付费,所以我们至少需要对它们进行一点保护——不像Fort Knox那样——但是简单的复制和重命名应该不起作用。老实说,如果你需要做的只是确保它没有索引,请将其存储在没有文件扩展名的情况下。否则,每次强制应用程序从外部服务器下载。抱歉,不可能。总下载量为150MB,超过1000张图片。没有文件扩展名这么简单,普通用户只需进行批量重命名即可-好的,只有5%的用户知道这一点,但仍然如此。在图片上稍微切换一下,99.99%的用户无法使用这些图片-程序员可以解决这个问题,但他们无论如何可以通过反编译应用程序-我只是想找到合适的“版权保护级别”-这很糟糕,但你必须赚些钱:-)也许你的问题是超过150MB的图片。。。这是一个真正的问题,它的目的是:-)这是一个有1000多张高质量图片的口述记录,应该可以脱机工作。如果只有几个,我不在乎有没有人复制它们。但是我们为这些图片付费,所以我们至少需要对它们进行一点保护——不像诺克斯堡那样——但简单的复制和重命名应该不起作用。我不理解这种方法。这会加快速度吗?或者让它更难“破解”——总是在第一个位置切换可能不太安全,但我想更快。如前所述,如果你想打败这种加密,那是小菜一碟。但我说的是一个只知道“文件”而不知道“字节”的人——所以如果我以某种方式阻止他的JPG(在每个字节上切换第1位),这就足够了。只有一个想法,也许它足够切换前10个字节中的第一位,然后保持原样。可能会加快速度,但计数器检查可能比简单的“全部切换”更昂贵。使用FF D8方法。工作很好,只需将整个图像作为字节数组读取,纠正两个断开的字节,然后将其交给BitmapFactory即可。谢谢你的主意。我不懂这个方法。这会加快速度吗?或者让它更难“破解”——总是在第一个位置切换可能不太安全,但我想更快。如前所述,如果你想打败这种加密,那是小菜一碟。但我说的是一个只知道“文件”而不知道“字节”的人——所以如果我以某种方式阻止他的JPG(在每个字节上切换第1位),这就足够了。只有一个想法,也许它足够切换前10个字节中的第一位,然后保持原样。可能会加快速度,但计数器检查可能比简单的“全部切换”更昂贵。使用FF D8方法。工作很好,只需将整个图像作为字节数组读取,纠正两个断开的字节,然后将其交给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;