微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – Android应用程序从服务器检索数据,但以安全的方式

显然我没有 androidjava专家.我在 Android应用程序中要做的是从服务器加载数据.我已经在这个部分工作了,并附上了源代码.但我想以一种安全的方式来做到这一点.作为第一步,而不是http://thisismyurl.com/a.PHP?action=get我想用这样的用户名/密码:http:// username:password@thisismyurl.com/a.PHP? action = get我该怎么做?我应该将用户名和密码部分添加到url吗?

让我说我已经完成了这不会有任何用处,因为有人可以打开apk并反编译源代码,并获取url和用户名/密码.那么有一种真正安全的方式呢?

我希望我在这里得到理解.

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();

    }   

}

解决方法

首先,您应该首先考虑您想要实现的内容,以及如何和之后决定您需要什么.

首先,您必须明确,恶意用户将尝试破解您的应用程序,如果您的应用程序存储财务,个人或其他类型的敏感数据,持久性将以指数增长.

话虽如此,有几点考虑:

>将密码转换成代码一个坏主意.如果你这样做,那么破解者就可以解释你使用了什么关键时间.
> URL中的硬编码密钥甚至更糟糕.请记住,您的URL将在到达终点(您的服务器)之前穿过很多地方,同时任何访问权限的用户都可以看到您的凭据,甚至在没有加密的情况下也不会发送密码.
>根据你如何生成密钥,我建议使用对称或非对称加密:

>如果您打算为所有客户端存储唯一的密码(顺便提一下,也是一个坏主意,因为如果恶意用户打破了密钥,那么他们可能拥有所有客户的信息),您可以使用对称加密方法如AES.您只需加密您的邮件,通过HTTP POST发送(例如)并在另一方解密.很简单的概念
>如果您计划为每个客户端生成一个密钥,那么您将有其他障碍,您需要使您的服务器知道您生成的密钥,或您的客户端知道为客户端生成了哪个密钥(依赖于您的身份面对它).在这种情况下,您可以使用下一个积分方法(基本上是所有这些方法之一).

>你可以简单地使用一个不对称的加密方法.这意味着服务器生成一对密钥,一个公钥和一个私钥.用户(客户端)将使公众对消息进行加密并将其发送到服务器.你可能会想:如何保护我的邮件,所以没有人可以解密他们,但我的服务器?这就是私钥加入的地方,如果你有私钥,你可以解密消息.这就是为什么你不想与任何人分享(这就是它的名字来自).这样,您的客户可能随时都可以使用您的公用密钥,无需任何混淆需求,因此您可以使用它来加密一些文本并发送.服务器将使用其私钥对消息进行解密,并相应处理.

最后一种方法的优点是:

>您不必担心如何使密钥安全地到达对方,因为它将被加密,只是服务器能够解密.
>您不需要为每个客户端生成一个密钥.
>如果你选择一个很好的非对称算法,如SSL / TLS,你不需要担心它的破裂(或至少,不如你选择了其他方法).
>更换一对旧钥匙就像生成一对钥匙一样容易,替换旧的私钥,使您的客户端拥有新的公钥.

你可能想看看这些链接

> Public-key cryptography
> Symmetric-key algorithm
> Advanced Encryption Standard (AES)
> Transport Layer Security

原文地址:https://www.jb51.cc/android/124692.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐