在设备上存储应用内购买的最佳方式是什么, 这样购买也可以离线访问但是 购买的安全性没有受到影响?
答案 0 :(得分:9)
不要将任何有价值的东西存放在设备上,因为它不可信任,并且很容易被有动机的人妥协。
现在,所有这些都取决于正在购买的商品的类型和价值以及如果商品遭到入侵会发生什么。
如果它真正有价值,那么使用远程安全服务器来管理安全项目。在应用程序购买中包括可以由远程安全服务器验证的收据,该服务器直接通过安全连接与Apple的服务器通信。请参阅verifying store receipts的链接。
答案 1 :(得分:7)
据我所知,安全存储购买资产的最便捷方式是使用某种形式的加密。
用户应该能够下载加密资产,该应用应该动态解密。
但是,请确保以安全的方式存储密钥,因为熟练的黑客可以轻松恢复字符串密钥(在应用程序二进制文件中)。保护密钥的一种好方法是使用基于服务器的系统进行某种身份验证。该应用程序将从服务器上获取密钥,并仅在解密资产所需的时间内保留密钥。
这种防御机制不是坚不可摧的;我觉得它足以让大多数用户试图破坏它而受到诽谤。
要解密设备上的资产,最好使用 CommonCrypto 。它由Apple(使用iOS SDK)提供,因此您无需从头开始构建它,也无需为您的应用程序提供文档(美国法律要求)。我发现Jim Dovey's Common Crypto wrapper是使用它的最简单方法。
希望有所帮助。 :)
答案 2 :(得分:1)
您需要加密该文件,您最好的选择可能是Common Crypto。为了能够脱机访问数据,您需要将加密密钥存储在设备上。
解决方案是使用钥匙串:使用SecRandomCopyBytes
生成足够长的密钥,并使用SecItemAdd
将其存储在钥匙串中。然后使用该密钥加密数据并以正常方式将其写入设备的本地存储。当需要从磁盘读回文件时,使用SecItemCopyMatching
从钥匙串加载密钥并使用它来解密数据。