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.
| 归档时间: |
|
| 查看次数: |
2597 次 |
| 最近记录: |