Pet*_*nas 10 java android inputstream bufferedreader
显然我不是android或java专家.我想在Android应用中做的是从服务器加载数据.我已经开始使用这部分并附上了源代码.但我想以一种安全的方式做到这一点.作为第一步,而不是http://thisismyurl.com/a.php?action=get我想用这样的用户名/密码http://username:password@thisismyurl.com/a.php?action=get来做:我怎么做?我应该只将用户名和密码部分添加到网址吗?
让我说我已经完成了这将不会有任何用处,因为有人可以打开apk并反编译源代码并获取网址和用户名/密码.那么有一种真正安全的方式吗?
我希望我能在这里得到理解.
String url = "http://thisismyurl.com/a.php?action=get";
String result = Web.executeWeb(url);
public class Web {
public static String executeWeb(final String url) {
final StringBuilder sb = new StringBuilder();
Thread thread = new Thread(new Runnable() {
public void run()
{
try
{
InputStream is = (InputStream) new URL(url).getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String result, line = reader.readLine();
result = line;
while((line=reader.readLine())!=null){
result+=line;
}
sb.append(result);
//System.out.println(result);
//Log.i("My Response :: ", result);
} catch (Exception e)
{
// TODO: handle exception
}
}
});
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sb.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
首先,您应首先考虑您想要实现的目标以及之后如何以及之后的决定.
首先,您必须明确恶意用户将尝试破解您的应用程序,如果您的应用程序存储财务,个人或其他类型的敏感数据,持久性将以指数方式增加.
话虽如此,还有一些注意事项:
在代码中硬编码密钥是个坏主意.如果你这样做,那么破解者破解你使用过的密钥只是时间问题.
URL中的硬编码密钥甚至更糟糕.请记住,您的网址会在到达终点(您的服务器)之前经过很多地方,同时,任何有权查看该流量的人都会看到您的凭据,即使您未加密地发送这些凭据也是如此.
根据您将如何生成密钥,我建议使用对称或非对称加密:
如果您计划为所有客户端存储唯一的密码(顺便说一句,这也是一个坏主意,因为如果恶意用户破坏您的密钥,他们可能拥有您客户的所有信息),您可以使用对称加密方法像AES一样.您只需加密消息,通过HTTP POST(例如)发送消息并在另一侧解密.很简单的概念.
如果您计划为每个客户生成一个密钥,那么您有一个额外的障碍,您需要让服务器知道您生成的密钥,或者您的客户知道哪个密钥为客户生成了(取决于您如何面对它).在这种情况下,您可以使用下一个点方法(这基本上是我将从所有这些中推荐的方法).
您可以简单地使用不对称加密方法.这意味着服务器生成一对密钥,一个是公钥,一个是私钥.用户(客户端)将使用公共加密消息并将其发送到服务器.您可能想知道:我如何保护我的消息,以便除了我的服务器之外没有人可以解密它们?这是私钥加入的地方,如果你有私钥,你可以解密消息.这就是为什么你不想与任何人分享它(这就是它的名字来源).这样,您的客户可以随时拥有您的公钥而不需要任何混淆,然后您使用它来加密某些文本并发送它.服务器将使用其私钥解密消息并相应地处理它.
最后一种方法的优点是:
您不必担心如何使密钥安全地到达另一方,因为它将被加密并且服务器只能解密.
您无需为每个客户生成密钥.
如果你选择一个好的非对称算法,比如SSL/TLS,你不需要担心它的破解(或者至少,不如你选择其他方法那么多).
更换旧密钥对就像生成一对新密钥一样简单,替换旧的私钥并使客户端拥有新的公钥.
您可能想看看这些链接:
| 归档时间: |
|
| 查看次数: |
3482 次 |
| 最近记录: |