【问题标题】:Base64 Encoded images on Android/iOSAndroid/iOS 上的 Base64 编码图像
【发布时间】:2011-07-16 18:39:59
【问题描述】:

我正在寻找一种方法来混淆我存储在我的应用程序中的图像,目前正在考虑使用 Base46 编码。

我需要一些开销最小的东西,或者如果可能的话,可以提高文件系统上标准文件的性能。

有人可以评论base64编码图像(png)并随后在目标平台上使用(解码?)的可行性吗?

谢谢。

【问题讨论】:

    标签: android image ios base64


    【解决方案1】:

    您要防范什么样的攻击? Base64 相当容易识别并且在空间方面具有潜在的显着影响(每张图像将占用额外 33% 的空间)。

    仅从数据中很难发现某种移动 XOR,,但它不足以保护真正重要的资产。

    【讨论】:

    • 目的是阻止机会主义者,我们无意为此花费大量时间或资源,因为坦率地说,没有“保护”是安全的。我们主要关心的是最小的开销,尽可能接近零开销。我之前读过,将多个图像存储在单个 base64 编码文件“块”中就是这样一种方式,但我不确定是否适用。
    • @Hamid:如果您真的想要“快速而简单”且开销很小,请将其保持为二进制格式,并对具有恒定值的所有内容进行 XOR。足以使文件“按原样”作为 png 无效,并且应该采用绝对最少的编码。它也不会产生任何空间开销。
    • 与在每个图像文件中仅异或一定数量的字节相比,这是否更可取?
    【解决方案2】:

    我相信您了解 Base64 不会欺骗任何真正想要获取您的位图的人。

    Jon Skeet 是对的,Base64 可以很好地将二进制数据编码为可读格式,但在这里并不能真正帮助您。对您的密码进行 XOR 会更快,并且不会增加任何大小开销。

    如果您真的想混淆您的位图,我建议您将它们存储在“raw”资源文件夹中。通过这样做,您将能够保留处理不同形式因素(ldpi、hdpi、...)的良好 Android 抽象。 扩展ImageView 类以直接使用R.raw.filename id 并在那里执行读取文件/解码流/创建位图。通过这样做,您将能够在需要时轻松回滚到标准的做事方式。

    【讨论】:

    • 你能解释一下将它们存储在 raw 中如何有助于混淆吗?我们不需要您提到的任何“抽象”(hdpi/ldpi/mdpi/xhdpi),并且实际上明确要求我们加载的任何图像都不能处理这个问题,因为它在我们的应用程序中明确处理。
    • 在原始文件夹中存储混淆位图不会帮助您进行任何混淆。它只会帮助您以一种简洁的方式进行操作,让您可以在开发周期中轻松启用/禁用它,而不会丢弃平台的分辨率独立功能。
    • 我明白了,所以,根据我之前的回复,它并没有真正的帮助,因为我特别不希望平台的分辨率独立功能。
    【解决方案3】:

    请注意,在 Android 的应用程序内存中存储多个位图时可能会遇到内存问题。在 android 中处理位图时,OutOfMemoryErrors 似乎是一个反复出现的问题。这是一个例子:outofmemoryerror-bitmap-size-exceeds-vm-budget-android

    【讨论】:

      猜你喜欢
      • 2018-02-28
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多