我已经完成了在应用程序计费 v3 中使用的应用程序的开发。我的应用程序是一个考试帮助应用程序,其中包含插入数据库的问题列表。让我担心的是安全性,因为除了 proguard 之外几乎没有其他东西了。我的应用程序查询已购买商品的库存,因此存储购买的商品不是问题。
因此,第一个问题是有人可以反编译该应用程序(我已经完成了),即使使用 proguard,您也可以毫不费力地检索所有问题。
接下来是应用程序的公钥。这可以很容易地从我的应用程序中获取,并且根据开发人员指南,这是我应该保证安全的东西。
但是我真的不知道如何实施任何形式的安全性。或者甚至我应该在安全方面走多远。如果没有服务器,如果我将所有内容都保留在设备上,我认识到它不会是完美的(远非完美),但我至少希望阻止而不是逗乐黑客。
所以本质上问题是:
我应该使用什么类型的安全性以及如何使用它?只要向我指出逐步浏览的链接,以便我能够理解它,那就太棒了。
非常感谢!
澄清:
不涉及服务器。数据存储在应用程序中。当查询库存时(通过 queryinventoryasync 方法),它会返回是否购买了库存,并且每次应用程序启动时都会运行。在应用程序计费本身中,我认为没问题,我正在询问有关我自己的应用程序的应用程序公钥的更多信息 - 我的意思是以某种方式使其更难以复制,但目前我刚刚将其分成 15 个字符串,然后我只是“添加”它们在运行时相互连接,但这比仅将其作为一个字符串好不了多少。我想以某种方式加密它只是不知道如何。
好问题。
公钥必须在设备上可用才能使用。一旦进入设备,它就不再受到真正的保护。密钥本身并不是秘密,但我们需要使其可能的替代成为一项更加困难的任务。
您可以做的是使用所谓的 XOR 加密。这是 XOR 加密器和解密器方法的示例。
public static String xorEncrypt(String input, String key) {
byte[] inputBytes = input.getBytes();
int inputSize = inputBytes.length;
byte[] keyBytes = key.getBytes();
int keySize = keyBytes.length - 1;
byte[] outBytes = new byte[inputSize];
for (int i=0; i<inputSize; i++) {
outBytes[i] = (byte) (inputBytes[i] ^ keyBytes[i % keySize]);
}
return new String(Base64.encode(outBytes, Base64.DEFAULT));
}
public static String xorDecrypt(String input, String key) {
byte[] inputBytes = Base64.decode(input, Base64.DEFAULT);
int inputSize = inputBytes.length;
byte[] keyBytes = key.getBytes();
int keySize = keyBytes.length - 1;
byte[] outBytes = new byte[inputSize];
for (int i=0; i<inputSize; i++) {
outBytes[i] = (byte) (inputBytes[i] ^ keyBytes[i % keySize]);
}
return new String(outBytes);
}
您需要的是选择一个密码字符串(String key
)并加密您的公钥(String input
) 使用它。您可以将此加密密钥存储在类中。当您需要真正的键值时,您可以调用xorDecrypt()
使用密码和公共(加密)密钥字符串。密码也是您存储在代码中某处的字符串。正如我所说,我们并没有真正保护它,但我们让它更难找到和/或替换。
您也可以添加关于如何组合加密公钥和密码的更复杂的逻辑。这只会增加更多的复杂性,但不会为您提供任何保证您的密钥不会被解密。任何状况之下谷歌证实 http://developer.android.com/google/play/billing/billing_best_practices.html#key异或加密总比没有好。
Android 4.3 添加了一些更多的安全功能,也可用于存储公钥。该解决方案需要服务器通信和硬件支持才能真正安全。这些都是密钥链增强功能和 Android Keystore Provider http://developer.android.com/about/versions/jelly-bean.html#43-enterprise-security.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)