在应用计费安全性

And*_*uin 11 security android in-app-billing

我已经完成了在app billing v3中使用的应用程序的开发.我的应用程序是一个考试帮助应用程序,其中包含一系列插入数据库的问题.令我担心的是安全性超越预期,其他几乎没有.我的应用程序查询库存中的已购买商品,因此存储购买不是问题.

因此,第一个问题是有人可以反编译应用程序(我已经完成了),即使使用proguard,您也可以毫不费力地检索所有问题.

接下来是应用程序的公钥.这可以很容易地从我的应用程序中获取,根据开发人员指南,这是我应该保持安全的.

但是我真的不知道如何实现任何形式的安全性.或者甚至我应该走多远才能获得安全保障.没有服务器,如果我将所有内容保留在设备上,我认识到它不会是完美的(远非它),但我至少会喜欢黑客而不是被逗乐.

基本上问题是:

我应该使用什么类型的安全性以及如何使用它?只是指着我一步一步地浏览它的链接,这样我就能理解它会很棒.

非常感谢你!

澄清:

没有涉及服务器.数据存储在应用程序中.当查询库存时(通过queryinventoryasync方法),如果已购买库存,则返回库存,并且每次应用程序启动时都会运行.在应用程序计费本身,我认为是可以的,我要求更多关于我自己的应用程序的应用程序公钥 - 我的意思是以某种方式使复制更难,但目前我已经把它分成15个字符串,我只是"添加"它们在运行时彼此相关,但这几乎没有任何好处,只需将它作为一个字符串.我想以某种方式加密它只是不知道如何.

ser*_*nka 18

好问题.

必须在设备上提供公钥才能使用.一旦它出现在设备上,它就不再受到真正的保护了.密钥本身并不是秘密,但我们需要将其替换为更困难的任务.

你可以做的是使用所谓的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);
}
Run Code Online (Sandbox Code Playgroud)

您需要的是选择密码字符串(String key)并String input使用它加密您的公钥().您可以将此加密密钥存储在类中.当您需要真正的密钥值时,可以xorDecrypt()使用密码和公共(加密)密钥字符串进行呼叫.密码也是您在代码中存储的字符串.正如我所说,我们并没有真正保护它,但我们更难以找到和/或替换它.

您可以添加更复杂的逻辑,如何组合加密的公钥和密码.这只会增加更多的复杂性,但不会保证您的密钥不会被解密.无论如何,谷歌确认 XOR加密总比没有好.

Android 4.3增加了一些安全功能,可用于存储公钥.该解决方案需要服务器通信和硬件支持才能真正安全.这些是Key Chain增强功能和Android Keystore Provider.